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文件。再次感谢。 –