乘客忽略RAILS_ENV

背景

我有一个包含各种变量的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并记录了以下错误:

机架应用程序对象中出现ActiveRecord :: NoDatabaseError异常(FATAL:数据库“ prod”不存在。

显然,错误消息是准确的,但不代表我期望的。

我假设这是旅客/阿帕奇问题,因为运行rails console一切都很好。

注意:我已经在其他帖子中看到了这一点,所以没有-没有DATABASE_URL环境变量浮在上覆盖来自的内容database.yml

我尝试过的

  1. .bashrc乘客应该为用户apache的运行源bashrc的运行方式,而后者又被设置为获取相关的env文件。
  2. /etc/sysconfig/httpd:我尝试过直接从Apache配置手动获取文件,并在脚本运行时通过将env转储到文件中进行验证,以确保将正确的值写入到env中,但是这也不会更改损坏的行为。

数据库

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
最大限度

更好的方法是只使用DATABASE_URLenv var。

如果您同时拥有config / database.yml和ENV['DATABASE_URL']set,那么Rails会将配置合并在一起。
Rails指南:配置数据库

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!当您处于中间状态时,最好采用约定而不是配置方法,而不要引入单独的var。

测试应用程序是否正确配置所有配置的一个试金石是,是否可以在不损害任何凭证的情况下,随时将代码库设为开源。https://12factor.net/config

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Rails.env和RAILS_ENV

如何永久设置RAILS_ENV

Nginx + Phusion乘客+ Rails =暂不设置ENV

bin / rails不尊重RAILS_ENV(Rails 5.2)

Elastic Beanstalk,Rails 5和乘客:Rails.env沮丧

将Rails_Env设置为生产的预编译资产

NGINX中的rails_env设置不影响旅客

RAILS_ENV无法正常工作。如何设置环境?

在rails_env = test时Rspec无法正常工作

RAILS_ENV 在命令行中无法正常工作

如何基于服务器自动设置RAILS_ENV

RACK_ENV和RAILS_ENV有什么区别?

为什么我得到“未定义的局部变量或方法'rails_env'”?

RAILS_ENV更改app / layouts / application.html.erb内容

gitlab耙资产:预编译RAILS_ENV =生产失败,出现权限错误

如何将RSPEC配置为从不在RAILS_ENV生产中运行

是否有任何理由不在Heroku上使用RAILS_ENV = staging?

bash命令中的自动完成环境变量(例如RAILS_ENV = test bundle ...)

Capistrano 3 在部署时不设置 rails_env 和 stage

乘客与 Rails Action 电缆

Rails 6本地服务器引导:RAILS_ENV =开发环境未定义

在不使用RAILS_ENV的情况下为Ruby应用程序指定环境的标准方法是什么?

正在获取:“迁移正在等待;运行'bin / rake db:migrate RAILS_ENV = development'解决此问题。” 克隆并迁移项目后

rake db:test:clone RAILS_ENV =“ test”失败,出现奇数错误:数据库配置未指定适配器

'rake spec'不能与自定义RAILS_ENV一起运行,但是'rspec'和'bundle exec rspec'可以运行

用户拒绝Rails乘客和mysql访问

Rails无法与Apache和乘客配合使用

更新后出现Rails Phusion乘客错误

多个Rails应用相同域的乘客