小编Cha*_*ene的帖子

将块传递给delayed_job

我有一个标记为由delayed_job异步处理的函数:

class CapJobs
  def execute(params, id)
    begin
      unless Rails.env == "test"
        Capistrano::CLI.parse(params).execute!
      end
    rescue
      site = Site.find(id)
      site.records.create!(:date => DateTime.now, :action => "Task Failure: #{params[0]}", :type => :failure)    
      site.save
    ensure
      yield id
    end 
  end   
  handle_asynchronously :execute
end 
Run Code Online (Sandbox Code Playgroud)

当我运行这个函数时,我传入一个块:

 capjobs = CapJobs.new
 capjobs.execute(parameters, @site.id) do |id|
   asite = Site.find(id)
   asite.records.create!(:date => DateTime.now, :action => "Created", :type => :init)
   asite.status = "On Demo"
   asite.dev = true
   asite.save
 end
Run Code Online (Sandbox Code Playgroud)

这在没有delayed_job的情况下运行时工作正常,但是当使用它运行时我得到以下错误

2012-08-13T09:24:36-0300: [Worker(delayed_job host:eagle pid:12089)] SitesHelper::CapJobs#execute_without_delay failed with LocalJumpError: no block given (yield) - …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails block delayed-job

11
推荐指数
2
解决办法
3153
查看次数

Monit不会使用kill命令停止脚本

我使用monit来监控几个进程.这些过程包括乘客实例和我编写的守护进程,为乘客实例生成pidfiles.Monit将启动这些过程没有问题.它不会阻止他们.以下是守护进程的Monit配置:

check process passenger_monitor with pidfile <%= passenger_monitor_pid %>
   group <%= application %>
   start program = "/bin/su - rails_apps -c 'source /home/rails_apps/.rvm/scripts/rvm; /home/rails_apps/passenger_monitor.rb'"
   stop program = "/bin/kill `/bin/cat <%= passenger_monitor_pid %>`"
Run Code Online (Sandbox Code Playgroud)

这是一个通过capistrano生成的erb模板.如果我通过终端以最小的环境以root身份运行stop命令,那么它可以工作,但当我请求Monit停止进程时,我收到以下错误:

[ADT Sep 17 10:38:31] error    : 'passenger_monitor' failed to stop
Run Code Online (Sandbox Code Playgroud)

我已经尝试了我能想到的一切.我无法找到或生成stop命令输出的任何日志.

passenger monit

3
推荐指数
1
解决办法
7477
查看次数

标签 统计

block ×1

delayed-job ×1

monit ×1

passenger ×1

ruby ×1

ruby-on-rails ×1