首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clockwork和register_javascript_expansion异常

Clockwork和register_javascript_expansion异常
EN

Stack Overflow用户
提问于 2013-07-18 17:15:34
回答 1查看 327关注 0票数 1

我使用SidekiqClockwork进行后台作业和调度。我的lib/clock.rb有一个用于执行一些rake任务的下一段代码:

代码语言:javascript
复制
require 'clockwork'
require File.expand_path('../../config/boot',        __FILE__)
require File.expand_path('../../config/environment', __FILE__)
require 'sidekiq'

include Clockwork
include Sidekiq

module Clockwork    
  every(1.day, 'rake places:get_from_api', at: '22:45') do
    Sidekiq.logger.info 'Starting rake places:get_from_api'
    execute_rake('places.rake', 'places:get_from_api') if Rails.env.production?
  end
end

def execute_rake(file,task)
  require 'rake'
  rake = Rake::Application.new
  Rake.application = rake
  Rake::Task.define_task(:environment)
  load "#{Rails.root}/lib/tasks/#{file}"
  rake[task].invoke
end

我将应用程序部署在EngineYard上,并拥有一个after_restart.rb钩子:

代码语言:javascript
复制
if environment == 'production'
  cw_pid_file = "#{shared_path}/pids/clockwork.pid"
  # stop clockwork
  run "if [ -d #{current_path} ] && [ -f #{cw_pid_file} ]; then cd #{current_path} && kill -int $(cat #{cw_pid_file}) 2>/dev/null; else echo 'clockwork was not running' ; fi"
  ## start clockwork
  run "cd #{current_path} && bundle exec clockworkd -c #{current_path}/lib/clock.rb --pid-dir #{shared_path}/pids --log --log-dir #{shared_path}/log restart >> log/clockwork.log 2>&1 &"
  run "ps -eo pid,command | grep clockwork | grep -v grep | awk '{print $1}' > #{cw_pid_file}"
end

部署后,我在clockworkd.clock.output日志中看到an exception

如何修复?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-18 19:55:47

引擎场工作人员在这里。

查看您的错误,您正试图在某个地方调用Nil上的each语句。可能在您的自定义rake任务中。如果不能看到更多的代码,我们就不能真正调试它。

此外,我可以推荐普通的Cron任务作为在Engine Yard上运行常规任务的更好方法,而不是使用发条。

  1. 在您的环境底部单击Crontab(图片http://d.pr/i/3Yeo )
  2. 通过提供作业名称和命令添加作业:cd /data/APP_NAME/current && RAILS_ENV=production /usr/local/bin/bundle exec rake task_name
  3. Give it a user time interval,然后按create。
    1. 返回您的环境按Apply。

如果你想用更多的ruby方法在rails中设置cron任务,有一个很好的gem叫做Whenever,它允许你用ruby编写cron任务,但是它们会被写到crontab中。Engine Yard上任何时候的Google都会返回一些关于其他人如何做的帖子,但对于像你所展示的那样简单的事情,我的上面的说明可能是最简单的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17719293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档