0

在我的Rails 4應用程序中,我在開發和測試中使用默認的Sqlite3,而在生產中使用Postgresql(Heroku)。Rails 4:從sqlite3遷移後在開發環境中設置Postgresql

我剛剛從Sqlite3切換到Postgresql的所有三個環境,一切工作正常。

我目前的database.yml看起來像這樣:

default: &default 
    adapter: postgresql 
    encoding: unicode 
    username: XXX 
    password: <--- empty ---> 
    database: name-of-my-app 
    pool: 5 

development: 
    <<: *default 
    host: localhost 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    <<: *default 
    host: localhost 

production: 
    <<: *default 
    host: localhost 

正如你所看到的,我使用的是默認的用戶名(我的Mac OSX用戶名)和密碼(沒有密碼)和它們在硬編碼database.yml文件。

如果我理解正確,從我在這裏和那裏閱讀,這是一個雙不好的做法,我應該改爲:

  1. 定義自定義的用戶名和密碼

  2. 與環境,這樣做變量

這是正確的,那麼正確的做法是什麼?

回答

1

使用您的Mac OS X用戶名和密碼進行開發和測試是好的。這是PostgreSQL默認由自制程序設置的方式,它是Mac Rails開發人員常用的配置。

如果您部署到Heroku,那麼Heroku會爲您指定一個DATABASE_URL環境變量;沒有什麼你需要做的。

我建議你設置的變化是:

  1. 你可能並不需要指定一個用戶名。如果你用自制軟件安裝了PostgreSQL,那麼你的用戶名就是默認的pg用戶,所以它是多餘的。
  2. 指定不同的測試數據庫。 dev和test使用相同的數據庫名稱會導致問題。
  3. 完全刪除database.yml的生產部分。 Heroku注入必要的環境變量,所以你不需要它。

有了這些變化,你的database.yml應該是這樣的:

development: 
    adapter: postgresql 
    encoding: unicode 
    database: name_of_my_app_development 
    min_messages: WARNING 
    pool: 5 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: postgresql 
    encoding: unicode 
    database: name_of_my_app_test 
    min_messages: WARNING 
    pool: 5 
+0

真棒,非常感謝你爲這個詳細而明確的答案。真的很有幫助。我將根據您的建議更新我的database.yml文件。再次感謝。 –