Den*_*nis 5 postgresql ruby-on-rails heroku ruby-on-rails-4.2
我对如何在使用Postgres和Heroku的Rails 4.2应用程序中配置数据库感到困惑.
按照Heroku指南中的建议,你会得到config/database.yml这样的:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000
development:
<<: *default
database: app_name_development
test:
<<: *default
database: app_name_test
production:
<<: *default
database: app_name_production
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这个时,我的开发和测试环境使用与登台环境相同的数据库(注意文件没有用于登台的配置).那不好.
这个Heroku指南用于连接到Ruby中的数据库,提到4.2之前的任何Rails应用程序都会database.yml被Heroku覆盖它们的文件.Heroku将解析DATABASE_URL环境变量并创建一个新database.yml文件.
因此,我认为可以database.yml在Heroku上的任何环境中省略配置,例如暂存和生产.你的database.yml文件基本上看起来像Hound(注意缺少生产配置).
development: &default
adapter: postgresql
encoding: unicode
database: app_development
pool: 5
test:
<<: *default
database: app_test
Run Code Online (Sandbox Code Playgroud)
但由于我们使用的是Rails 4.2,我认为Heroku不会覆盖该database.yml文件.在这种情况下,您是否必须为database.ymlHeroku上的环境指定数据库配置?或者将它们排除在外仍然是安全的吗?如果我们确实需要为Heroku环境指定配置,那么以下内容是否足够?
staging:
url: <%= ENV['DATABASE_URL'] %>
production:
url: <%= ENV['DATABASE_URL'] %>
Run Code Online (Sandbox Code Playgroud)
我也对开发和测试环境的正确配置感到困惑.如上所述,显示的第一个配置包含使用Heroku上的登台数据库而不是本地数据库的环境.
这个Heroku指南说要导出DATABASE_URL你的app连接的环境变量(一旦安装了Postgres,你可以连接到它).
假设您DATABASE_URL按照文章中的指定导出env var,那么您的开发和测试配置必须是什么样的?我们是否采用第一个指南中所示的配置,例如
default: &default
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000
development:
<<: *default
database: app_name_development
test:
<<: *default
database: app_name_test
Run Code Online (Sandbox Code Playgroud)
或者我们使用Heroku指南中所示的配置(使用host和username)
development:
adapter: postgresql
host: localhost
username: user
database: app-dev
Run Code Online (Sandbox Code Playgroud)
更新1:这就是我现在所知道的.config/database.yml如果您部署到Heroku,则不需要登台和生产配置,无论您的Rails版本如何.在4.2之前,Heroku将database.yml根据DATABASE_URL环境变量的值生成自己的文件,覆盖配置文件(如果存在).从Rails 4.2开始,你的应用程序将DATABASE_URL直接使用环境变量(绕过database.yml文件),因此Heroku不需要(也不会)生成配置文件.
我还想出了为什么我的开发和测试环境使用Heroku应用程序中的远程登台数据库而不是其database.yml配置中指定的本地数据库.这是因为我的本地.env开发文件基于我的暂存.env文件,该文件包含用于连接数据库的环境变量,例如DATABASE_URL.因为DATABASE_URL我的开发.env文件中存在,我的Rails 4.2应用程序正在使用它,因此连接到临时数据库.为了解决这个问题,我从开发.env文件中删除了这些环境变量,并创建了本地数据库(并运行了迁移)bundle exec rake db:setup.
更新2: Rails指南的这一部分详细介绍了如何配置数据库,值得阅读:http://guides.rubyonrails.org/configuring.html#configuring-a-database
你的大多数假设都是正确的。下面是一个合理的database.yml配置文件。
default: &default
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000
development:
<<: *default
database: app_name_development
test:
<<: *default
database: app_name_test
staging:
url: <%= ENV['DATABASE_URL'] %>
production:
url: <%= ENV['DATABASE_URL'] %>
Run Code Online (Sandbox Code Playgroud)
确保RAILS_ENVHeroku 上的 已正确设置( 或staging)production,否则 Rails 将默认为development。
在本地,测试将选择test环境。默认情况下,应用程序将使用该development环境以开发模式启动。
| 归档时间: |
|
| 查看次数: |
4319 次 |
| 最近记录: |