缺少必要的宝石通过宝石时在生产环境中创建时执行的cron(Missing required gems

2019-09-22 04:13发布

我有红宝石在生产运行Rails应用程序,该应用程序都有库存模型,并应当每1分钟更新一次。

为了更新这个模型我创建简单的rake任务分贝:填充:股票 ,当它仅包含两种操作:

  1. 截断股票模型
  2. 补库存模型最新数据从web服务获取

这个rake任务应执行每1分钟,为了这个目的,我使用每当宝石 。 在这里我schedule.rb:

env :PATH, ENV['PATH']
set :job_template, nil
set :output, {:standard => '/home/admin/shared/log/cron.log', :error => '/home/admin/shared/log/cron-error.log'}

job_type :rake, "cd :path && rake :task RAILS_ENV=:environment --trace :output"

every 1.minute do
  rake "db:populate:stocks"
end

在生产中我使用RVM运行红宝石1.9.2-P180,轨3.1.0和Capistrano的,这里更新的cron标签我Capistrano的任务:

after "deploy:update_code" do
 run "cd #{release_path} && whenever --clear-crontab RAILS_ENV=production"
 run "cd #{release_path} && whenever --update-crontab RAILS_ENV=production"
end

而我schedule.rb创建的cron任务,如:

# Begin Whenever generated tasks for: RAILS_ENV=production
PATH=/home/admin/.rvm//gems/ruby-1.9.2-p180@admin/bin:/home/admin/.rvm//gems/ruby-1.9.2-p180@global/bin:/home/admin/.rvm//rubies/ruby-1.9.2-p180/bin:/home/admin/.rvm//bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

* * * * * cd /home/admin/releases/20120904103658 && RAILS_ENV=production rake db:populate:stocks --trace >> /home/admin/shared/log/cron.log 2>> /home/admin/shared/log/cron-error.log

问题是定期任务执行失败rake任务,从cron-error.log中

/home/admin/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:314:in `bin_path': can't find gem rake ([">= 0"]) with executable rake (Gem::GemNotFoundException)
from /home/admin/.rvm//gems/ruby-1.9.2-p180@admin/bin/rake:19:in `<main>'

我很想念这里,为什么cron作业加载失败我ENV? 有没有跟我schedule.rb任何问题吗?

Answer 1:

确保您的RVM默认为正确的红宝石版本,其中宝石。 然后尝试这样做会显式调用任何宝石的束(假设你使用RVM)使用一束EXEC耙...



Answer 2:

我有类似的问题,我与修复

rvm cron setup

在服务器中。 此加载RVM ENV变量(PATH,GEM_HOME,GEM_PATH ......)我的cronjob。

我已经删除了set命令

env :PATH, ENV['PATH']


Answer 3:

修改PATH是不够的,检查rvm help cron -有几个选项,这将有助于在crontab中管理RVM。



文章来源: Missing required gems when execute cron created by whenever gem in production environment