每当 gem 不工作时,Rails 4
whenever gem not working, Rails 4
我正在使用 Whenever gem 在我的网站上安排一些工作。
目前在做开发环境。
我已经按照指南的建议安装了 gem。
在schedule.rb
every 2.minutes do
rake "vip_recomend:give"
end
在lib/tasks/vip_recomend.rake
namespace :vip_recomend do
desc "Give vip recomend to ads that are in waiting list"
task give: :environment do
girls = Girl.all
girls.each do |girl|
BlacklistMailer.blacklisted(girl).deliver
end
user = User.first
UserMailer.password_reset(user).deliver
end
end
然后我尝试了这些命令:
whenever --set environment=development --update-crontab
或
whenever --update-crontab
没有任何反应。
然后我检查 cron 是否更新了我的东西:
crontab -l
输出:
# Begin Whenever generated tasks for: /home/my_host/blogs/config/schedule.rb
* * * * * /bin/bash -l -c 'cd /home/my_host/blogs && RAILS_ENV=development bundle exec rake vip_recomend:give --silent >> /log/cron_log.log 2>&1'
# End Whenever generated tasks for: /home/my_host/blogs/config/schedule.rb
当我尝试从控制台 运行 rake 任务时,它起作用了。
有什么帮助吗?
谢谢。
更新 1
当 schedule.rb 我有这个
env :PATH, ENV['PATH']
在 cron 错误日志中我收到此消息。
/opt/alt/ruby21/lib64/ruby/2.1.0/rubygems/dependency.rb:298:in `to_specs': Could not find 'bundler' (>= 0) among 8 total gem(s) (Gem::LoadError)
from /opt/alt/ruby21/lib64/ruby/2.1.0/rubygems/dependency.rb:309:in `to_spec'
from /opt/alt/ruby21/lib64/ruby/2.1.0/rubygems/core_ext/kernel_gem.rb:53:in `gem'
from /home/individualki/rubyvenv/ror/2.1/bin/bundle:22:in `<main>'
尝试在 schedule.rb
中使用指定环境以下列格式编写作业:
every 2.minutes do
rake "vip_recomend:give", :environment => 'development'
end
然后转到您的命令提示符,并在您的应用程序目录中尝试以下操作:
$ whenever --update-crontab
$ whenever
您现在应该会看到,无论何时用 ENV=DEVELOPMENT
列出您的任务。
PATH 可能是问题,通过将以下内容放在 schedule.rb 的顶部,确保正确的包路径
env :PATH, ENV['PATH']
或者,如果以上方法无效,请尝试添加以下方法。
env :GEM_PATH, ENV['GEM_PATH']
解决方案:
我将 Whenever 更改为 Rufus-scheduler。
在此之前,我尝试了所有可能的解决方案来解决我的问题。
我认为问题出在我在共享主机上的 Ruby 安装中,但我没有时间检查它。
我正在使用 Whenever gem 在我的网站上安排一些工作。 目前在做开发环境。
我已经按照指南的建议安装了 gem。
在schedule.rb
every 2.minutes do
rake "vip_recomend:give"
end
在lib/tasks/vip_recomend.rake
namespace :vip_recomend do
desc "Give vip recomend to ads that are in waiting list"
task give: :environment do
girls = Girl.all
girls.each do |girl|
BlacklistMailer.blacklisted(girl).deliver
end
user = User.first
UserMailer.password_reset(user).deliver
end
end
然后我尝试了这些命令:
whenever --set environment=development --update-crontab
或
whenever --update-crontab
没有任何反应。
然后我检查 cron 是否更新了我的东西:
crontab -l
输出:
# Begin Whenever generated tasks for: /home/my_host/blogs/config/schedule.rb
* * * * * /bin/bash -l -c 'cd /home/my_host/blogs && RAILS_ENV=development bundle exec rake vip_recomend:give --silent >> /log/cron_log.log 2>&1'
# End Whenever generated tasks for: /home/my_host/blogs/config/schedule.rb
当我尝试从控制台 运行 rake 任务时,它起作用了。
有什么帮助吗? 谢谢。
更新 1
当 schedule.rb 我有这个
env :PATH, ENV['PATH']
在 cron 错误日志中我收到此消息。
/opt/alt/ruby21/lib64/ruby/2.1.0/rubygems/dependency.rb:298:in `to_specs': Could not find 'bundler' (>= 0) among 8 total gem(s) (Gem::LoadError)
from /opt/alt/ruby21/lib64/ruby/2.1.0/rubygems/dependency.rb:309:in `to_spec'
from /opt/alt/ruby21/lib64/ruby/2.1.0/rubygems/core_ext/kernel_gem.rb:53:in `gem'
from /home/individualki/rubyvenv/ror/2.1/bin/bundle:22:in `<main>'
尝试在 schedule.rb
中使用指定环境以下列格式编写作业:
every 2.minutes do
rake "vip_recomend:give", :environment => 'development'
end
然后转到您的命令提示符,并在您的应用程序目录中尝试以下操作:
$ whenever --update-crontab
$ whenever
您现在应该会看到,无论何时用 ENV=DEVELOPMENT
列出您的任务。
PATH 可能是问题,通过将以下内容放在 schedule.rb 的顶部,确保正确的包路径
env :PATH, ENV['PATH']
或者,如果以上方法无效,请尝试添加以下方法。
env :GEM_PATH, ENV['GEM_PATH']
解决方案:
我将 Whenever 更改为 Rufus-scheduler。
在此之前,我尝试了所有可能的解决方案来解决我的问题。 我认为问题出在我在共享主机上的 Ruby 安装中,但我没有时间检查它。