Tag: 延迟工作

DelayedJob:如何解决“作业无法加载”的问题?

我正在使用Ruby on Rails 3.1.0和DelayedJob。 网络上的很多人都得到了“ Job failed to load: uninitialized constant Syck::Syck ”错误,但我认为我至少发现了产生错误的内容(在我的情况下)。 我有一个类似以下的ActiveModel: class Contact include ActiveModel::Conversion include ActiveModel::Validations include ActiveModel::Dirty extend ActiveModel::Naming extend ActiveModel::Translation attr_accessor :full_name, :email, :subject, :message def initialize(attributes = {}) attributes.keys.each do |attr| instance_variable_set “@” + attr.to_s, attributes[attr.to_sym] end end validates_presence_of :full_name, :email, :subject, :message def persist @persisted = true […]

如何为特定作业设置max_run_time?

我想为我知道需要一段时间的特定工作设置Delayed::Worker.max_run_time = 1.hour 。 但是,这在initializers/delayed_job_config.rb设置为全局配置。 因此,此更改将使我的所有作业的最长运行时间为1小时。 有没有办法在不创建自定义作业的情况下为一个特定作业更改它?

从delayed_job worker中排除队列

在delayed_jobs中,可以为特定队列运行worker。 我似乎无法找到有关如何运行worker并排除特定队列的任何示例/文档。 我正在尝试让1名工作人员获得超高优先级的东西,1名工作人员处理剩下的工作。 是通过指定哪些队列与哪个工作者相关来实现此目的的唯一方法? 有没有办法生成运行除queue_x之外的所有队列的worker?

在所有延迟工作之前挂钩

是否可以在ALL delayed_job任务之前运行方法? 基本上,我们正在尝试确保运行delayed_job的每个服务器都有我们代码的最新实例,因此我们希望运行一个方法,在每个作业运行之前对其进行检查。 (我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job调用它。)

从内部重新评估或评估延迟的工作?

有没有办法从作业任务本身内部确定正在运行的delayed_job作业的状态? 我有一个与服务相互作用的工作,这个服务非常不稳定,对于某类连接失败,我想要重新排队,只有在重试限制再次发生连接失败时才会引发exception。 伪代码来演示我想要做的事情: def do_thing service.send_stuff(args) rescue Exception1, Exception2 if job.retries == JOBS_MAX raise else job.requeue end end 我不想在任何失败时提出exception,因为通常这项工作将在以后的重试中完成,并且它只是为我制造噪音。 但我确实想知道它是否永远不会完成。

升级到Rails 3.2.2:如何解决与Delayed Job gem相关的’未定义的Syck :: DomainType方法’错误?

我从3.1.0运行Ruby on Rails 3.2.2。 我有这个问题 undefined method send_register_email\’ for #\n//.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-3.0.1/lib/delayed/performable_mailer.rb:6:in perform … 有许多其他人试图解决的DelayedJobgem:有人成功,其他人没有。 如果我尝试了我在网上找到的所有解决方案,那么我属于后一类。 这时,在我的Gemfile中,我有: gem ‘rails’, ‘3.2.2’ gem “rake” … gem ‘delayed_job_active_record’ … 在升级Rails之前,在我的Gemfile中我有: gem ‘rails’, ‘~> 3.1.0’ gem “rake” … # I also used the following statement by running Rails 3.2.2 but it didn’t work. gem ‘delayed_job’ … 为了发送电子邮件,在我的控制器中,我使用以下代码链接: ::Users::Mailer.delay.send_register_email(@user) 在我的APPLICATION_ROOT/app/mailers/users/mailer.rb文件中,我有: class Users::Mailer […]

delayed_job:使用handle_asynchronously时出现’undefined method’错误

我正在尝试使用delayed_job在我的rails数据库中运行更大的csv导入。 这是我的控制器和模型方法: 控制器方法 def import InventoryItem.import(params[:file], params[:store_id]) redirect_to vendors_dashboard_path, notice: “Inventory Imported.” end 模型方法 def self.import(file, store_id) CSV.foreach(file.path, headers: true) do |row| inventory_item = InventoryItem.find_or_initialize_by_upc_and_store_id(row[0], store_id) inventory_item.update_attributes(:price => row.to_hash[“price”], :updated_at => “#{Time.now}”) end end handle_asynchronously :import 我已将’delayed_job’和’daemons’添加到我的gemfile中,然后捆绑。 运行生成器,使用rake jobs:work启动开发工作进程rake jobs:work ,然后尝试通过应用程序运行导入。 这是我得到的错误: Routing Error undefined method `import’ for class `InventoryItem’ 在整合delayed_job时我错过了什么吗? 这个导入过程之前运行得很好,所以只是想知道我搞砸了哪里。 提前致谢!

延迟::带模块的工作

Delayed :: Job是否可以使用模块? 我遇到了麻烦: module SomeModule class SomeClass def regular_method self.delay.long_method “test” end def long_method data puts data end end end 错误信息: [Worker(host:leo pid:10480)] SomeModule::SomeClass#long_method failed with NoMethodError: undefined method `long_method’ for # – 4 failed attempts [Worker(host:leo pid:10480)] 1 jobs processed at 9.1484 j/s, 1 failed …

如果你想使用它,如何解决“你需要为你的Gemfile添加gem’守护进程’”生产模式错误?

我正在尝试正确使用Capistrano和RVM,以便将我的Ruby on Rails 3.2.2应用程序部署到运行Ubuntu 10.04 LTS的远程计算机上。 它接缝我解决了我之前的问题“ Linux Ubuntu上的Rvm – Capistrano集成 ”。 但是,在部署时,我得到与DelayedJob gem相关的以下错误: … * executing “cd /srv/www//releases/20120314135318 && bundle install” servers: [“”] [] executing command [] rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell ‘ruby-1.9.3-p125’ -c ‘cd /srv/www//releases/20120314135318 && bundle install’ ** [out :: ] Using rake (0.9.2.2) ** [out :: ] Using builder (3.0.0) … ** [out :: […]

通过Capistrano任务启动多个具有特定队列的DelayedJob worker

我正在研究使用delayed_job的队列。 我发现这个页面概述了各种启动工人的方法,但是我想保留我目前的Capistrano方法: set :delayed_job_args, “-n 2 -p ecv2.production” after “deploy:start”, “delayed_job:start” … 我想知道如何修改delayed_job_args来处理具有特定队列的产生1工作者,以及为每个其他工作处理1个工作者。 到目前为止,我所拥有的只是如此重写每项任务: namespace :delayed_job do task :restart, :roles => :app do run “cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job -p ecv2.production –queue=export restart” run “cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job -p ecv2.production restart” end end ……但那没什么好玩的。 有什么建议?