2013-10-30 47 views
1

我在收到delayed_job以在生产环境中启动时遇到问题。一切工作,因为它应该在开发时只使用耙工作:工作命令,但在与Capistrano部署到我的服务器后,以及几个小时的失败尝试后,我无法弄清楚如何让DJ运行。delayed_job gem不会在生产环境中启动(Rails 4)

正如它说的在github上为delayed_job存储库所做的,我确信我捆绑了“daemons”gem,并且试图用命令“bin/delayed_job start”而不是“script/delayed_job start”因为我在轨道4.我也跑了所需的发电机“轨产生的delayed_job”,这确实产生我的项目的bin目录内的文件:

#!/usr/bin/env ruby 

require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment')) 
require 'delayed/command' 
Delayed::Command.new(ARGV).daemonize 

我一直得到的错误是-bash: bin/delayed_job: No such file or directory我认为这可能是因为我使用rvm。

至于我的gemfile,我包含了delayed_job_active_record和守护进程。在这一点上,我完全陷入了困境,并没有探索的链接。

source 'https://rubygems.org' 
ruby '2.0.0' 
gem 'rails', '4.0.0' 
# Rails defaults 
gem 'sass-rails', '~> 4.0.0' 
gem 'bundler' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.0.0' 
gem 'jquery-rails' 
gem 'turbolinks' 
gem 'jbuilder', '~> 1.2' 
# learn-rails 
gem 'anjlab-bootstrap-rails', :require => 'bootstrap-rails', :github => 'anjlab/bootstrap-rails' 
gem 'figaro' 
gem 'gibbon' 
gem 'high_voltage' 
gem 'simple_form', '>= 3.0.0.rc' 
gem 'delayed_job_active_record', '~> 4.0.0' 
group :development, :test do 
gem 'sqlite3' 
gem 'better_errors' 
gem 'quiet_assets' 
gem 'capistrano', '~> 2.15.5' 
gem 'rvm-capistrano' 
gem 'rspec-rails' 
end 
group :test do 
gem "factory_girl_rails", "~> 4.0" 
gem 'capybara' 
gem 'poltergeist' 
gem "faker", "~> 1.2.0" 
end 
group :production do 
gem 'unicorn' 
gem 'pg' 
gem 'daemons' 
end 
+0

是否可以,你有capistrano宝石只用于:开发和:在你的Gemfile中测试? – Leger

+0

@Leger,是的,可以将Capistrano开发出来,这是一个很好的答案,可以进一步阐明这个话题:http://stackoverflow.com/a/15661804/2922050 –

+0

我需要做的事情是让自己工作。你可以SSH入服务器并再次耙数据库,运行'''RAILS_ENV = production bundle exec rake db:migrate'''。每隔一段时间,我部署新的迁移时不会为我个人运行,因此这是必要的。 也可以在这里找到delayed_job.log文件'''application_name/log/delayed_job.log''' 您可以验证远程服务器上是否存在bin/delayed_job文件? – Thomas

回答

0

确保bin/delayed_job中的第一行指向有效的Ruby可执行文件。你只用ruby这可能无法解决。当你进入rails_root目录时,rvm会将完整的路径添加到ruby,但是脚本执行时不会发生这种情况。一个稍微冒险的解决方案是cd到目录中,执行which ruby并将其写入bin/delayed_job,例如:#!<path_to_ruby>。因为Capistrano已经这样​​做了,所以不需要拨打/usr/bin/env