背景
我有一个带有各种变量的env文件,我的Rails应用程序依赖它,包括RAILS_ENV,它被初始化为此文件中的开发。我还获得了database.yml
文件,为我的环境定义了数据库连接(如下)。当我运行rails控制台时,一切看起来都应该如此。检查Rails.configuration.database_configuration[Rails.env]
会返回以下内容:
{"adapter"=>"postgresql",
"encoding"=>"utf8",
"database"=>"dev",
"username"=>"rails",
"password"=>"***",
"host"=>"localhost",
"pool"=>5,
"timeout"=>5000}
然而,当我尝试访问该应用程序时,我得到502并记录以下错误:
Rack应用程序对象中的异常ActiveRecord :: NoDatabaseError(FATAL:数据库" prod"不存在。
显然,错误信息是准确的,但并不代表我期望发生的事情。
我认为这是一个Passenger / Apache问题,因为运行rails console一切都很开心。
注意:我已经在其他帖子中看到了这一点,所以没有 - 没有DATABASE_URL
环境变量在database.yml
覆盖事物的周围。
我尝试过的事情
.bashrc
:Passenger is supposed to source the bashrc for the user apache is running as,后者又设置为提供相关的env文件。/etc/sysconfig/httpd
:我尝试直接从Apache配置手动获取文件,并在脚本运行时通过将env转储到文件进行验证,正确的值使其进入env,但是这也没有改变破碎的行为。的database.yml
development:
adapter: postgresql
encoding: utf8
database: dev
username: rails
password: <%= ENV['RAILS_DB_PWD'] %>
host: <%= ENV['RAILS_DB_HOST'] %>
pool: 5
timeout: 5000
# 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: utf8
database: test
username: rails
password: <%= ENV['RAILS_DB_PWD'] %>
host: <%= ENV['RAILS_DB_HOST'] %>
pool: 5
timeout: 5000
production:
adapter: postgresql
encoding: utf8
database: prod
username: rails
password: <%= ENV['RAILS_DB_PWD'] %>
host: <%= ENV['RAILS_DB_HOST'] %>
port: 5432
pool: 5
timeout: 5000
答案 0 :(得分:0)
更好的方法是使用DATABASE_URL
env var。
如果你同时设置了config / database.yml和
ENV['DATABASE_URL']
Rails会将配置合并在一起 Rails Guides: Configuring a Database
common: &common
adapter: postgresql
encoding: utf8
template: template0 # Required for UTF8 encoding
pool: 5
timeout: 5000
development:
<<: *common
database: dev
test:
<<: *common
database: test
production:
<<: *common
database: prod
我通常建议您避免在database.yml
中指定数据库用户名和密码。使用ENV vars Luke!虽然你已经到了中途,但最好坚持使用约定而不是引入单独的变量。
对应用程序是否正确分析了所有配置的试金石 代码是代码库是否可以在任何时候开源 一刻,没有妥协任何凭据。 https://12factor.net/config