Ruby on rails 无法在生产环境中运行sidekiq(Procfile&x2B;systemd)

Ruby on rails 无法在生产环境中运行sidekiq(Procfile&x2B;systemd),ruby-on-rails,sidekiq,puma,foreman,Ruby On Rails,Sidekiq,Puma,Foreman,我正在使用Foreman和Capistrano部署我的rails应用程序。web(即Puma)过程正确启动,但我无法让我的工人(即sidekiq)作为生产环境运行 我调整了SystemD导出中生成的app-worker-1.service文件,同时强制正确设置环境,但未成功: [Unit] StopWhenUnneeded=true [Service] User=deployment_user WorkingDirectory=/var/www/app_name/current ExecSta

我正在使用Foreman和Capistrano部署我的rails应用程序。
web
(即Puma)过程正确启动,但我无法让我的
工人
(即sidekiq)作为
生产环境运行

我调整了SystemD导出中生成的
app-worker-1.service
文件,同时强制正确设置环境,但未成功:

[Unit]
StopWhenUnneeded=true

[Service]
User=deployment_user
WorkingDirectory=/var/www/app_name/current
ExecStart=/bin/bash -lc "RAILS_ENV=production bundle exec sidekiq -e production"

RestartSec=1
Restart=on-failure

StandardOutput=journal
StandardError=journal

SyslogIdentifier=%n

KillMode=process
我尝试了一切…我添加了
记录器。debug
语句显示
RACK_ENV
RAILS_ENV
都被错误地设置为
development

以下是我从流程日志中得到的错误:

I, [2015-09-19T13:56:14.813528 #31187]  INFO -- : Celluloid 0.17.1.2 is running in BACKPORTED mode. [ http://git.io/vJf3J ]
D, [2015-09-19T13:56:16.765338 #31187] DEBUG -- : RACK_ENV=development
D, [2015-09-19T13:56:16.766057 #31187] DEBUG -- : RAILS_ENV=development
'development' database is not configured. Available: ["production"]
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/connection_specification.rb:248:in `resolve_symbol_connection'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/connection_specification.rb:211:in `resolve_connection'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/connection_specification.rb:139:in `resolve'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/connection_specification.rb:169:in `spec'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_handling.rb:50:in `establish_connection'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/railtie.rb:120:in `block (2 levels) in <class:Railtie>'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active_support/lazy_load_hooks.rb:38:in `instance_eval'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active_support/lazy_load_hooks.rb:38:in `execute_hook'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active_support/lazy_load_hooks.rb:28:in `block in on_load'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active_support/lazy_load_hooks.rb:27:in `each'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active_support/lazy_load_hooks.rb:27:in `on_load'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/railtie.rb:116:in `block in <class:Railtie>'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:30:in `instance_exec'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:30:in `run'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:55:in `block in run_initializers'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:226:in `block in tsort_each'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:429:in `each_strongly_connected_component_from'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:347:in `block in each_strongly_connected_component'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:345:in `each'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:345:in `call'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:345:in `each_strongly_connected_component'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:224:in `tsort_each'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:203:in `tsort_each'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:54:in `run_initializers'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/application.rb:352:in `initialize!'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/railtie.rb:194:in `public_send'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/railtie.rb:194:in `method_missing'
/var/www/app_name/releases/20150918131757/config/environment.rb:12:in `<top (required)>'
...
I[2015-09-19T13:56:14.813528#31187]信息--:赛璐珞0.17.1.2正在后端口模式下运行。[ http://git.io/vJf3J ]
D、 [2015-09-19T13:56:16.765338#31187]调试--:机架环境=开发
D、 [2015-09-19T13:56:16.766057#31187]调试--:RAILS_ENV=development
未配置“开发”数据库。可用:[“生产”]
/var/www/app\u name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active\u record/connection\u adapters/connection\u specification.rb:248:in“解析符号\u连接”
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_-record/connection_-adapters/connection_-specification.rb:211:in'resolve_-connection'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/connection_specification.rb:139:in“resolve”
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/connection_specification.rb:169:in'spec'
/var/www/app\u name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active\u record/connection\u handling.rb:50:在“建立连接”中
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/railtie.rb:120:in“block(2层)in”
/var/www/app\u name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active\u support/lazy\u load\u hooks.rb:38:in'instance\u eval'
/var/www/app\u name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active\u support/lazy\u load\u hooks.rb:38:in'execute\u hook'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active_-support/lazy_-load_-hooks.rb:28:in'block-in-on-load'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active_support/lazy_load_hooks.rb:27:in'each'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activesupport-4.2.4/lib/active_support/lazy_load_hooks.rb:27:in“on_load”
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_-record/railtie.rb:116:in'block in'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:30:in'instance_exec'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:30:in'run'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:55:“运行中的块初始化器”
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:226:in'block in tsort_each'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:348:在每个强连接的组件中的“块(2级)”中
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:429:在“每个强连接的组件”中
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:347:“每个强连接的组件中的块”
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:345:in'each'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:345:in'call'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:345:“每个强连接的组件”
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:224:in'tsort_each'
/usr/local/rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/tsort.rb:203:in'tsort_each'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:54:in“run_initializers”
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/application.rb:352:in'initialize!'
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/railtie.rb:194:in“public_send”
/var/www/app_name/shared/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/railtie.rb:194:in'method_missing'
/var/www/app_name/releases/20150918131757/config/environment.rb:12:in`'
...

Sidekiq提供了一个可能有用的示例systemd单元文件。它显示了如何使用-e正确设置环境:

找到了

首先,我在SystemD上启用了调试:

Environment=SYSTEMD_LOG_LEVEL=debug
然后,在查看“我的服务”日志时,我的注意力被吸引到一条消息上,该消息在第一次提示查看服务状态本身时看起来与此无关

capistrano@droplet2:/lib/systemd/system$ systemctl status app_name-worker-1.service
● alagarderie-web-1.service
   Loaded: error (Reason: Invalid argument)
   Active: inactive (dead) since Sat 2015-09-19 20:25:14 EDT; 35min ago
 Main PID: 32292 (code=exited, status=0/SUCCESS)

...
... the first line are not important ... 
...
Warning: alagarderie-web-1.service changed on disk. Run 'systemctl daemon-reload' to reload units.
警告,什么!我知道当我发现问题时我会恨我自己


对SystemD脚本文件的更改不会自动同步。我重新加载了我的应用程序目标,然后启动它;瞧

我知道。。。这是我第一次尝试的设置!不过运气不好,
RAILS\u ENV
仍然设置为“开发”。
capistrano@droplet2:/lib/systemd/system$ systemctl status app_name-worker-1.service
● alagarderie-web-1.service
   Loaded: error (Reason: Invalid argument)
   Active: inactive (dead) since Sat 2015-09-19 20:25:14 EDT; 35min ago
 Main PID: 32292 (code=exited, status=0/SUCCESS)

...
... the first line are not important ... 
...
Warning: alagarderie-web-1.service changed on disk. Run 'systemctl daemon-reload' to reload units.