【问题标题】:Ruby gem 'whenever' not acting. Using dev env and rvmRuby gem '无论何时'都不在演戏。使用 dev env 和 rvm
【发布时间】: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


【解决方案1】:

您是否创建了一个名为 article.fetcharticles 的 rake 任务?如果没有,那么您就在使用错误的方式。当您应该指定要运行的方法时,您正在指定一个 rake 任务,如下所示:

runner "Article.fetcharticles"

代替你的

rake "article.fetcharticles"

【讨论】:

  • 我已将其更改为 runner 版本,并将 A 文章大写。到目前为止没有任何变化,“完成”字也没有写入日志文件。
【解决方案2】:

如果您希望它在本地工作,您必须自己实际安装 crontab。无论何时在开发中都不起作用的 cmets 不是任何时候的问题;无论何时不打算在您的开发环境中工作。这个想法是它应该用于在您的服务器上设置 cron 条目,这通常是一个登台或生产服务器。这通常作为部署过程的一部分来完成;通常使用 capistrano。

因此,要使其在本地运行,您必须在本地计算机上安装此 cron 配置。您可以通过生成文件并将其复制到/etc/cron.d/ 来做到这一点。但是,请记住,通常最好在您的开发环境中手动运行任务。

最后,如果您尝试调试 cron 条目可能会失败的原因,那么无论如何都值得尝试手动运行该命令。例如:

/bin/bash -l -c 'cd/root/aggregrator && RAILS_ENV=development bundle exec rake article.fetcharticles --silent >> /root/aggregrator/tareas.log

实际运行成功。我想你会从cd/roo/aggregator 立即得到一个错误,没有生成这样的文件或目录。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多