ruby-on-rails - 在生产环境中执行由 gem 创建的 cron 时缺少所需的 gem

标签 ruby-on-rails ruby cron rvm whenever

我在生产环境中运行了 ruby​​ on Rails 应用程序,该应用程序具有 STOCK 模型,并且应该每 1 分钟更新一次。

为了更新此模型,我创建了简单的 rake 任务 db:populate:stocks,当它仅包含两个操作时:

  1. 截断 STOCK 模型
  2. 使用从网络服务获取的最新数据填充 STOCK 模型

这个 rake 任务应该每 1 分钟执行一次,为此我使用 whenever gem。这是我的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 运行 ruby​​ 1.9.2-p180、rails 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

问题是 cron 任务无法执行 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 作业无法加载我的环境?我的 schedule.rb 有问题吗?

最佳答案

确保您的 RVM 默认使用 gem 所在的正确 ruby​​ 版本。 然后尝试使用bundle exec rake ... 通过这样做,它将显式调用 bundle 中的任何 gem(假设您正在使用 RVM)

关于ruby-on-rails - 在生产环境中执行由 gem 创建的 cron 时缺少所需的 gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12274875/

相关文章:

ruby-on-rails - RoR 3.1 中的 password_digest、has_secret_password 和表单验证

ruby-on-rails - Rails 应用程序在迁移后抛出错误不应影响它

php - 如何将资金从一个 PayPal 账户转移到另一个 PayPal 账户?

ruby-on-rails - 所见即所得和 rails 3

jquery - [Rails]jQuery : Syntax error, 无法识别的表达式

ruby - 一次给setter赋多个值 : self. x = (y, z) 导致语法错误

ruby - 仅安全随机十六进制数字

Linux内核开发

Cron 表达式

ruby-on-rails - 使用 PaperClip AV 上传后视频显示黑屏