Ruby on rails 当Rails环境设置为production on Passenger inside Docker时,Rails尝试连接到本地主机

Ruby on rails 当Rails环境设置为production on Passenger inside Docker时,Rails尝试连接到本地主机,ruby-on-rails,ruby-on-rails-4,nginx,passenger,Ruby On Rails,Ruby On Rails 4,Nginx,Passenger,我正在尝试使用Passenger(5.1.2)、Nginx和Docker部署Rails应用程序,我已经在一台没有Docker的服务器上部署了一个应用程序,并且都成功了 我遇到的问题是,即使我将passenger\u app\u env设置为production,在启动Nginx时,Rails应用程序仍试图在本地主机上连接到我的PostgreSQL,但当我访问Rails控制台时,连接成功 最奇怪的是,在我的数据库.yml中,我的开发凭据和生产凭据有一个主机,它不是localhost,而是一个Ama

我正在尝试使用Passenger(5.1.2)、Nginx和Docker部署Rails应用程序,我已经在一台没有Docker的服务器上部署了一个应用程序,并且都成功了

我遇到的问题是,即使我将
passenger\u app\u env
设置为production,在启动Nginx时,Rails应用程序仍试图在本地主机上连接到我的PostgreSQL,但当我访问Rails控制台时,连接成功

最奇怪的是,在我的
数据库.yml
中,我的开发凭据和生产凭据有一个主机,它不是
localhost
,而是一个Amazon RDS

 development:

  database:  <%= ENV['POSTGRES_DB_DEV'] %>
  adapter: postgresql
  encoding: unicode
  user: <%= ENV['POSTGRES_USER_DEV'] %>
  password: <%= ENV['POSTGRES_PWD_DEV'] %>
  host: <%= ENV['POSTGRES_HOST_DEV'] %>
  port: <%= ENV['POSTGRES_PORT_DEV'] %>
  pool: <%= ENV['POSTGRES_POOL_DEV'] %>

production:
  database:  <%= ENV['POSTGRES_DB_PROD'] %>
  adapter: postgresql
  encoding: unicode
  user: <%= ENV['POSTGRES_USER_PROD'] %>
  password: <%= ENV['POSTGRES_PWD_PROD'] %>
  host: <%= ENV['POSTGRES_HOST_PROD'] %>
  port: <%= ENV['POSTGRES_PORT_PROD'] %>
  pool: <%= ENV['POSTGRES_POOL_PROD'] %>
以下是乘客在启动应用程序时设置的环境变量:

GEM_HOME = /opt/rvm/gems/ruby-2.1.2
SHELL = /usr/sbin/nologin
IRBRC = /opt/rvm/rubies/ruby-2.1.2/.irbrc
PYTHONUNBUFFERED = 1
PASSENGER_DEBUG_DIR = /tmp/passenger.spawn-debug.XXXX7Po96m
MY_RUBY_HOME = /opt/rvm/rubies/ruby-2.1.2
USER = nobody
IN_PASSENGER = 1
RACK_ENV = production
PASSENGER_USE_FEEDBACK_FD = true
PATH = /opt/rvm/gems/ruby-2.1.2/bin:/opt/rvm/gems/ruby-2.1.2@global/bin:/opt/rvm/rubies/ruby-2.1.2/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.
WSGI_ENV = production
PWD = /api
NODE_PATH = /usr/share/passenger/node
NODE_ENV = production
SHLVL = 0
HOME = /nonexistent
RAILS_ENV = production
LOGNAME = nobody
SERVER_SOFTWARE = nginx/1.10.2 Phusion_Passenger/5.1.2
GEM_PATH = /opt/rvm/gems/ruby-2.1.2:/opt/rvm/gems/ruby-2.1.2@global
PASSENGER_APP_ENV = production
RUBY_VERSION = ruby-2.1.2
BUNDLER_ORIG_PATH = /opt/rvm/gems/ruby-2.1.2/bin:/opt/rvm/gems/ruby-2.1.2@global/bin:/opt/rvm/rubies/ruby-2.1.2/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.
BUNDLER_ORIG_GEM_PATH = /opt/rvm/gems/ruby-2.1.2:/opt/rvm/gems/ruby-2.1.2@global
BUNDLE_BIN_PATH = /opt/rvm/gems/ruby-2.1.2/gems/bundler-1.14.6/exe/bundle
BUNDLE_GEMFILE = /Befective/api/Gemfile
BUNDLER_VERSION = 1.14.6
RUBYOPT = -rbundler/setup
RUBYLIB = /opt/rvm/gems/ruby-2.1.2/gems/bundler-1.14.6/lib
站点的Nginx配置文件:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    passenger_enabled on;
    passenger_app_env production;
    passenger_max_request_queue_size 2000;
    passenger_ruby /opt/rvm/wrappers/ruby-2.1.2/ruby;
    root /api/public;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

}
乘客提出的错误:

could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
 (PG::ConnectionBad)
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `initialize'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `new'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `connect'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/postgresql_adapter.rb:242:in `initialize'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `new'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `postgresql_connection'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/abstract/connection_pool.rb:438:in `new_connection'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/abstract/connection_pool.rb:448:in `checkout_new_connection'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in `acquire_connection'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/abstract/connection_pool.rb:349:in `block in checkout'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/abstract/connection_pool.rb:348:in `checkout'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/abstract/connection_pool.rb:263:in `block in connection'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/abstract/connection_pool.rb:262:in `connection'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_adapters/abstract/connection_pool.rb:571:in `retrieve_connection'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_handling.rb:113:in `retrieve_connection'
  /opt/rvm/gems/ruby-2.1.2/gems/activerecord-4.2.7/lib/active_record/connection_handling.rb:87:in `connection'
  /Befective/api/config/initializers/apartment.rb:23:in `block in <top (required)>'
  /opt/rvm/gems/ruby-2.1.2/gems/apartment-1.1.0/lib/apartment.rb:24:in `configure'
  /Befective/api/config/initializers/apartment.rb:12:in `<top (required)>'
  /opt/rvm/gems/ruby-2.1.2/gems/activesupport-4.2.7/lib/active_support/dependencies.rb:268:in `load'
  /opt/rvm/gems/ruby-2.1.2/gems/activesupport-4.2.7/lib/active_support/dependencies.rb:268:in `block in load'
  /opt/rvm/gems/ruby-2.1.2/gems/activesupport-4.2.7/lib/active_support/dependencies.rb:240:in `load_dependency'
  /opt/rvm/gems/ruby-2.1.2/gems/activesupport-4.2.7/lib/active_support/dependencies.rb:268:in `load'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/engine.rb:652:in `block in load_config_initializer'
  /opt/rvm/gems/ruby-2.1.2/gems/activesupport-4.2.7/lib/active_support/notifications.rb:166:in `instrument'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/engine.rb:651:in `load_config_initializer'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/engine.rb:615:in `each'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/engine.rb:615:in `block in <class:Engine>'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/initializable.rb:30:in `instance_exec'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/initializable.rb:30:in `run'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/initializable.rb:55:in `block in run_initializers'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:226:in `block in tsort_each'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:418:in `block (2 levels) in each_strongly_connected_component_from'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:427:in `each_strongly_connected_component_from'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:417:in `block in each_strongly_connected_component_from'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/initializable.rb:44:in `each'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/initializable.rb:44:in `tsort_each_child'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:411:in `call'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:411:in `each_strongly_connected_component_from'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:347:in `block in each_strongly_connected_component'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:345:in `each'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:345:in `call'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:345:in `each_strongly_connected_component'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:224:in `tsort_each'
  /opt/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:205:in `tsort_each'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/initializable.rb:54:in `run_initializers'
  /opt/rvm/gems/ruby-2.1.2/gems/railties-4.2.7/lib/rails/application.rb:352:in `initialize!'
  /Befective/api/config/environment.rb:5:in `<top (required)>'
  config.ru:3:in `require'
  config.ru:3:in `block in <main>'
  /opt/rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/builder.rb:55:in `instance_eval'
  /opt/rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/builder.rb:55:in `initialize'
  config.ru:1:in `new'
  config.ru:1:in `<main>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `eval'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `preload_app'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:156:in `<module:App>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:30:in `<module:PhusionPassenger>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<main>'
结果:

  Message from application: true {"development"=>{"database"=>nil, "adapter"=>"postgresql", "encoding"=>"unicode", "user"=>nil, "password"=>nil, "host"=>nil, "port"=>nil, "pool"=>nil}, "production"=>{"database"=>nil, "adapter"=>"postgresql", "encoding"=>"unicode", "user"=>nil, "password"=>nil, "host"=>nil, "port"=>nil, "pool"=>nil}}, {"GEM_HOME"=>"/opt/rvm/gems/ruby-2.1.2", "SHELL"=>"/usr/sbin/nologin", "IRBRC"=>"/opt/rvm/rubies/ruby-2.1.2/.irbrc", "PYTHONUNBUFFERED"=>"1", "PASSENGER_DEBUG_DIR"=>"/tmp/passenger.spawn-debug.XXXXS4Y1Ah", "MY_RUBY_HOME"=>"/opt/rvm/rubies/ruby-2.1.2", "USER"=>"www-data", "IN_PASSENGER"=>"1", "RACK_ENV"=>"production", "PASSENGER_USE_FEEDBACK_FD"=>"true", "PATH"=>"/opt/rvm/gems/ruby-2.1.2/bin:/opt/rvm/gems/ruby-2.1.2@global/bin:/opt/rvm/rubies/ruby-2.1.2/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.", "WSGI_ENV"=>"production", "PWD"=>"/Befective/api", "NODE_PATH"=>"/usr/share/passenger/node", "NODE_ENV"=>"production", "SHLVL"=>"0", "HOME"=>"/var/www", "RAILS_ENV"=>"production", "LOGNAME"=>"www-data", "SERVER_SOFTWARE"=>"nginx/1.10.2 Phusion_Passenger/5.1.2", "GEM_PATH"=>"/opt/rvm/gems/ruby-2.1.2:/opt/rvm/gems/ruby-2.1.2@global", "PASSENGER_APP_ENV"=>"production", "RUBY_VERSION"=>"ruby-2.1.2", "BUNDLER_ORIG_PATH"=>"/opt/rvm/gems/ruby-2.1.2/bin:/opt/rvm/gems/ruby-2.1.2@global/bin:/opt/rvm/rubies/ruby-2.1.2/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.", "BUNDLER_ORIG_GEM_PATH"=>"/opt/rvm/gems/ruby-2.1.2:/opt/rvm/gems/ruby-2.1.2@global", "BUNDLE_BIN_PATH"=>"/opt/rvm/gems/ruby-2.1.2/gems/bundler-1.14.6/exe/bundle", "BUNDLE_GEMFILE"=>"/Befective/api/Gemfile", "BUNDLER_VERSION"=>"1.14.6", "RUBYOPT"=>"-rbundler/setup", "RUBYLIB"=>"/opt/rvm/gems/ruby-2.1.2/gems/bundler-1.14.6/lib"} 

因此,在花了几个小时与这个错误,我终于设法击败它

根据报告:

默认情况下,nginx将删除从其 除TZ变量外的父进程。本指令允许 保留某些继承变量,更改其值,或 创建新的环境变量

这就是为什么使用
docker run-e
设置的任何环境变量都不会到达Nginx


要保留这些变量,请在目录
/etc/Nginx/main.d
中放置一个以
*.conf
结尾的Nginx配置文件,在该目录中告诉Nginx保留这些变量,然后通过添加
include/etc/Nginx/main.d/*.conf在
/etc/Nginx/Nginx.conf
中引用这些文件

我会确保您正在尝试使用
https
连接到RDS,而不是unix套接字。@CWitty我认为这无关紧要,因为正如我所说,当我使用:bundle exec rails c访问控制台时,它成功连接。您可以使用ENV[“database_URL”]而不是5+vars来删除database.yml中的所有积垢@max我会考虑这一点,但我认为这与问题无关,因为DATABASE_URL env变量未在docker上设置,因此乘客和rails应该尊重DATABASE.yml中的连接
rails.env
给了您什么?如果它不是产品,那么可能是RAILS_ENV设置不正确。您好,先生,您能在*conf文件中共享保存ENV变量的语法吗
#environment.rb

Rails.application.initialize!
raise "#{ENV.to_h.to_s}"
  Message from application: true {"development"=>{"database"=>nil, "adapter"=>"postgresql", "encoding"=>"unicode", "user"=>nil, "password"=>nil, "host"=>nil, "port"=>nil, "pool"=>nil}, "production"=>{"database"=>nil, "adapter"=>"postgresql", "encoding"=>"unicode", "user"=>nil, "password"=>nil, "host"=>nil, "port"=>nil, "pool"=>nil}}, {"GEM_HOME"=>"/opt/rvm/gems/ruby-2.1.2", "SHELL"=>"/usr/sbin/nologin", "IRBRC"=>"/opt/rvm/rubies/ruby-2.1.2/.irbrc", "PYTHONUNBUFFERED"=>"1", "PASSENGER_DEBUG_DIR"=>"/tmp/passenger.spawn-debug.XXXXS4Y1Ah", "MY_RUBY_HOME"=>"/opt/rvm/rubies/ruby-2.1.2", "USER"=>"www-data", "IN_PASSENGER"=>"1", "RACK_ENV"=>"production", "PASSENGER_USE_FEEDBACK_FD"=>"true", "PATH"=>"/opt/rvm/gems/ruby-2.1.2/bin:/opt/rvm/gems/ruby-2.1.2@global/bin:/opt/rvm/rubies/ruby-2.1.2/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.", "WSGI_ENV"=>"production", "PWD"=>"/Befective/api", "NODE_PATH"=>"/usr/share/passenger/node", "NODE_ENV"=>"production", "SHLVL"=>"0", "HOME"=>"/var/www", "RAILS_ENV"=>"production", "LOGNAME"=>"www-data", "SERVER_SOFTWARE"=>"nginx/1.10.2 Phusion_Passenger/5.1.2", "GEM_PATH"=>"/opt/rvm/gems/ruby-2.1.2:/opt/rvm/gems/ruby-2.1.2@global", "PASSENGER_APP_ENV"=>"production", "RUBY_VERSION"=>"ruby-2.1.2", "BUNDLER_ORIG_PATH"=>"/opt/rvm/gems/ruby-2.1.2/bin:/opt/rvm/gems/ruby-2.1.2@global/bin:/opt/rvm/rubies/ruby-2.1.2/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.", "BUNDLER_ORIG_GEM_PATH"=>"/opt/rvm/gems/ruby-2.1.2:/opt/rvm/gems/ruby-2.1.2@global", "BUNDLE_BIN_PATH"=>"/opt/rvm/gems/ruby-2.1.2/gems/bundler-1.14.6/exe/bundle", "BUNDLE_GEMFILE"=>"/Befective/api/Gemfile", "BUNDLER_VERSION"=>"1.14.6", "RUBYOPT"=>"-rbundler/setup", "RUBYLIB"=>"/opt/rvm/gems/ruby-2.1.2/gems/bundler-1.14.6/lib"}