2015-05-13 77 views
0

我在開發和測試中使用SQLite,而在Heroku上使用PostgreSQL。我想用PostgreSQL替換SQLite。我在Cloud9環境中編程(Rails 4)。我沒有可能會丟失的數據。試圖從SQLite切換到PostgreSQL

我做了什麼:

首先,我編輯的database.yml:

default: &default 
     adapter: postgresql 
     encoding: unicode 
     pool: 5 
development: 
    <<: *default 
    database: app_development 
test: 
    <<: *default 
    database: app_test 
production: 
    <<: *default 
    database: app_production 

然後:

  • 在Gemfile中,我搬到gem 'pg'從生產環境,只有所有環境並刪除gem 'sqlite3'
  • 我跑bundle install
  • 我跑sudo service postgresql start
  • 我跑sudo sudo -u postgres psql
  • ,進入create database "app_development";
  • 進入\q

更新:我增加了以下額外的步驟:

  • 我創建了一個PSQL新用戶CREATE USER my_username SUPERUSER PASSWORD 'my_password';
  • 在database.yml中我加入了usernamepassword
  • 在我的database.yml加入host: myurl.c9.io
  • 我在psql裏輸入:GRANT ALL ON DATABASE app_development to my_username

運行sudo sudo -u postgres psql然後\list產生:

 Name   | Owner | Encoding | Collate | Ctype | Access privileges 
postgres   | postgres | SQL_ASCII | C  | C  | 
template0   | postgres | SQL_ASCII | C  | C  | =c/postgres   + 
        |   |   |   |  | postgres=CTc/postgres 
template1   | postgres | SQL_ASCII | C  | C  | =c/postgres   + 
        |   |   |   |  | postgres=CTc/postgres 
app_development | postgres | SQL_ASCII | C  | C  | 

我沒有看到我的用戶名作爲app_development的主人......

錯誤:運行rake db:migrate超時,說明PG::ConnectionBad: could not connect to server: Connection timed out Is the server running on host "myurl.c9.io" (ip address) and accepting TCP/IP connections on port 5432?

爲什麼與PostgreSQL的連接失敗?

+2

您沒有在您的database.yml中提到的用戶名/密碼。 ... –

+0

我應該如何設置密碼?我輸入了'sudo sudo -u postgres psql',然後輸入'\ password',然後輸入我的新密碼。在database.yml中,我明白我應該包含'username:<%= ENV ['USERNAME']%>','password:<%= ENV ['PASSWORD']%>'和host:<%= ENV [ IP']%>'。然後我應該在什麼文件中輸入密碼(可能在config \ secrets.yml中)?另外兩個變量應該是什麼? – Nick

回答

1

替換到database.yml文件的內容:

default: &default 
    adapter: postgresql 
    host: localhost 
    username: yourusername 
    password: yourpassword 
    timeout: 5000 
    port: 5432 
development: 
    <<: *default 
    database: app_development 
test: 
    <<: *default 
    database: app_test 
production: 
    <<: *default 
    database: app_production 

因爲你使用Heroku的,那麼你可以把生產部分爲是

+0

但是這不是不安全嗎?不應該添加'密碼:<%= ENV ['PASSWORD']%>'?.如果是的話,我應該如何「硬編碼」我的密碼?這是用'echo「輸出PASSWORD = fill_in_my_password」>>〜/ .profile'? – Nick

+0

這是你的發展,然後你的數據必須是不敏感的。 ENV ['PASSWORD']僅用於製作,但在您的情況下,Heroku爲您準備,所以無後顧之憂。 – Sasha

+0

謝謝,我添加了它,但現在得到了錯誤消息'PG :: ConnectionBad:FATAL:用戶對等身份驗證失敗「here_states_my_username」' – Nick

相關問題