【发布时间】:2015-05-05 14:24:11
【问题描述】:
场景:名为 'whenever' 的 gem 将 ruby 代码转换为 crontab 命令,然后您将该代码写入名为 schedule.rb 的文件中,该文件一旦运行就会转换为 crontab 文件。
我的schedule.rb 中有一个 sn-p,它将每 15 分钟执行一次位于 Active Record 模型中的方法,然后会在任务文件中写一个日志说“完成”,但如果我没有任何反应让无论何时做某事。
当我在浏览器上手动运行模型、控制器和视图时,它们可以正常工作,但如果我将其保留为自动模式,它不会做任何事情。
所以,对于schedule.rb
set :output, "#{path}/tareas.log"
every 15.minutes do
rake "article.fetcharticles"
command "echo'done'"
end
将其翻译成 crontab 文件为:
0,15,30,45 * * * * /bin/bash -l -c 'cd/root/aggregrator && RAILS_ENV=development bundle exec rake article.fetcharticles --silent >> /root/aggregrator/tareas.log
fetcharticles 方法不过是模型(文章)中的一个 def,它带有类似 curl 的命令,正如我所说,当我从 firefox 手动运行它时,它可以正常工作。
还有什么我应该做的吗?
所以,其他帖子所说的是,'whenever' 不适用于开发环境,但在生产环境中。好吧,那篇文章是从 2011 年开始的,所以我希望“无论何时”已经解决了这个问题,因为如果我尝试更改为服务器 .-e 生产,我会收到有关密钥配置等的错误,并且它不会启动,所以我仍处于开发模式。
然后另一个人写道:
您在使用 RVM 吗?如果是这样,无论何时都会生成一个像这样的 crontab 条目(是的,就像我的一样)
他的解决方案是:
要完成这项工作,您需要将适当的 .rvmrc 文件添加到项目的根文件夹中。
但是,我该怎么做呢?
他的帖子在这里,但没有得到批准的答案。
Whenever cron job is not working in rails 3
更新:
问题似乎很大程度上指向没有所需文件的方向,可能与报告的这个 rmv 问题有关,但是我看到了 tareas.log 文件中的错误日志,(显示一个 sn -p)
/usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler/spec_set.rb:92:in `block in materialize': Could not find i18n-0.7.0 in any of the sources (Bundler::GemNotFound)
from /usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler/spec_set.rb:85:in `map!'
from /usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler/spec_set.rb:85:in `materialize'
from /usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler/definition.rb:132:in `specs'
from /usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler/definition.rb:177:in `specs_for'
from /usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler/definition.rb:166:in `requested_specs'
from /usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler/environment.rb:18:in `requested_specs'
from /usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler/runtime.rb:13:in `setup'
from /usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler.rb:122:in `setup'
from /usr/local/rvm/gems/ruby-2.2.0@global/gems/bundler-1.9.1/lib/bundler/setup.rb:18:in `<top (required)>'
from /usr/local/rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /usr/local/rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /root/aggregrator/config/boot.rb:3:in `<top (required)>'
from bin/rails:7:in `require_relative'
所提供的解决方案都没有解决问题的核心,因为问题在于缺少文件,正如我在写初始帖子时所指出的那样
【问题讨论】:
-
你能试着在
echo和'done'之间加一个空格吗?我在终端中尝试了echo'done',它给了我bash: echodone: command not found。但是echo 'done'工作正常。 -
我只是在使用终端。尝试在终端中用双引号运行命令,您将收到该错误。但是,有了空间,它工作得很好。
标签: ruby-on-rails rvm