簡體   English   中英

乘客忽略RAILS_ENV

[英]Passenger Ignoring 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的源,而bashrc則被設置為提供相關的env文件。
  2. /etc/sysconfig/httpd :我已經嘗試過直接從Apache config手動獲取文件,並在腳本運行時通過將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

更好的方法是僅使用DATABASE_URL env var。

如果同時設置了config / database.yml和ENV['DATABASE_URL']則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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM