Tag: 延迟工作

在Rails完成加载后运行代码?

我有一个需要每分钟执行一次的周期性任务(使用delayed_job)。 我希望Rails在加载完成后自动将其排队,如果系统中还没有这样的任务。 在整个Rails启动流程结束时运行一些代码的好地方是什么? 有人建议使用config / environments / development.rb(或其他环境),但是当我从那里排队作业时,delayed_job会给我ActiveRecord问题。 我咨询了http://guides.rubyonrails.org/initialization.html ,似乎也没有明确的位置。 是否可以通过rake或其他方式在我的应用程序代码外部完成这种部署后设置? 有什么建议? 谢谢!

Ruby on Rails,delayed_job

我正在使用这个gem作为我的应用程序。 我找不到我需要的参数。我的控制器中有两个function:创建和分析。 我想在调用create analyse-method后5分钟后运行一个analyse-method ,或者我在模型中还有一个函数:进程我希望在5分钟后运行一个anylse-method (来自控制器),当一个进程方法是调用。 我找到了这样的smt: handle_asynchronously :in_the_future, :run_at => Proc.new { 5.minutes.from_now } 但它没有说它应该被称为function之后。 编辑:我试图延迟我的工作,它似乎保存了一切,问题是1分钟后它没有运行perform_analysis方法。 可能是什么问题? 模型: after_create :process_name, :perform_analysis def perform_analysis list=Analysis.do_picture_analyse update_image_url(list) end handle_asynchronously :perform_analysis, :run_at => Proc.new { 1.minutes.from_now } SQL(8.3ms)INSERT INTO“delayed_jobs”(“尝试”,“created_at”,“failed_at”,“handler”,“last_error”,“locked_at”,“locked_by”,“priority”,“queue”,“run_at” ,“updated_at”)VALUES(?,?,?,?,?,?,?,?,?,?,?)[[“尝试”,0],[“created_at”,星期六,2013年3月16日14: 30:19 UTC +00:00],[“failed_at”,nil],[“handler”,“—!ruby / object:Delayed :: PerformableMethod \ nobject:!ruby / ActiveRecord:Arraydb \ n属性:\ n id:45 \ n […]

无法弄清楚Delayed :: DeserializationError

我正在使用Rails 3.2.12运行delayed_job 3.0.5(delayed_job_active_record 0.4.1)。 由于“反序列化”,我的一些工作失败了。 以下是其中一个失败处理程序的一个非常简单的示例: — !ruby/struct:Delayed::PerformableMethod object: LOAD;Project;924951 method: :send_project_open_close_without_delay args: [] 当我尝试调用这个工作时: Delayed::DeserializationError: Job failed to load: undefined method `members’ for nil:NilClass. 每个人似乎都认为这是由不再存在的AR对象引起的。 就我而言,我可以运行处理程序: Project.find(924951).send_open_close_without_delay 还有什么可能导致错误?

在不同环境中,表的延迟作业选择属性不同

我正在使用延迟作业将Model方法排队在另一个Model如下所示: article_loader.rb date_value_in_string = “2017-06-21 07:17:00” Article.delay(:queue => ‘article_load’).article_loading([date_value_in_string]) 即使我已经将String作为参数传递给方法,但在方法内部它会在生产环境中转换为Time对象。 article.rb在生产环境中 def self.article_loading(args) date_value = args[0] p date_value.class # Time end 在开发环境中,它是一个字符串。 article.rb在开发环境中 def self.article_loading(args) date_value = args[0] p date_value.class # String end 我不知道为什么会这样。 任何帮助将不胜感激。

如何在应用程序的其余部分继续运行时让控制器等待延迟作业?

(这个问题是如何处理Rails应用程序的长请求以便其他用户不会延迟过多的后续问题? ) 用户向我的Rails应用程序提交答案,并在后端检查最多10秒。 这会导致所有其他用户的延迟,所以我正在尝试使用delayed_job gem将检查移动到Worker进程。 Worker代码将结果返回给控制器。 但是,控制器没有意识到应该耐心等待结果,因此会导致错误。 如何让控制器等待结果并让应用程序的其余部分同时处理简单的请求? 在Javascript中,可以使用回调来调用函数而不是返回值。 我应该在Ruby中做同样的事情并从Worker回调控制器吗? 更新: 或者,如何从Worker调用控制器方法? 然后我可以在完成后调用相关的操作。 这是相关代码: 控制器: def submit question = Question.find params[:question] user_answer = params[:user_answer] @result, @other_stuff = SubmitWorker.new.check(question, user_answer) render_ajax end submit_worker.rb: class SubmitWorker def check #lots of code… end handle_asynchronously :check end

在延迟工作中运行叉子

我们在Web应用程序中使用延迟作业,我们需要并行发生多个延迟作业的工作,但我们不知道需要多少工作。 解决方案我目前正在尝试运行一个worker并在所需任务中调用fork / Process.detach。 我之前试图直接在rails应用程序中运行fork,但它对乘客来说效果不好。 这个解决方案似乎运作良好。 生产中可能有任何警告吗?

使用Paperclip上传到Heroku上的S3(delayed_job问题)

我正在尝试上传到我构建的投资组合应用程序,特别是试图找到将delayed_job挂钩到进程的位置。 这一切都是有效的。 现在它在app/controllers/portfolio_items_controller.rb:18:in ‘create’上返回undefined method ‘call’ for # app/controllers/portfolio_items_controller.rb:18:in ‘create’所以这是我的模型和控制器的那部分……任何人都可以看到任何可能的东西出错了? 我现在使用的钩子是我从这个博客得到的: http : //madeofcode.com/posts/42-paperclip-s3-delayed-job-in-rails /app/controllers/portfolio_items_controller.rb def create @portfolio_item = PortfolioItem.new(params[:portfolio_item]) if @portfolio_item.save flash[:notice] = “Portfolio item created. As soon as files are uploaded Portfolio item will be made live.” redirect_to @portfolio_item else render :action => ‘new’ end end /app/models/asset.rb class Asset { :thumb => “20×20#”, […]

作业无法加载:未初始化的常量Syck :: Syck

我在后台使用延迟作业(collectiveideas fork)运行方法 我正在运行的方法如下所示,它取出了isbn的价格: def update_prices(isbn13) @amazon = Nokogiri::XML(open(“http://www.amazon.com/s/?url=search-alias%3Daps&field-keywords=#{isbn13}”)) price = @amazon.search(‘span.listprice’).first.text.gsub(‘$’, ”) book = Book.find_by_isbn13(isbn13) book.update_attribute(:amazon_us_price, price) end handle_asynchronously :update_prices 现在,当我运行此作业时,作业将添加到数据库中,但在运行时遇到错误。 错误是非常大的,但我认为它的要点来自第一行:作业未能加载:未初始化的常量Syck :: Syck。 {Job failed to load: uninitialized constant Syck::Syck. Handler: “— !ruby/struct:Delayed::PerformableMethod object: &id005 !ruby/object:BooksController _action_name: show _config: !omap [] _env: &id001 GATEWAY_INTERFACE: CGI/1.1 PATH_INFO: /books/9780425160985 QUERY_STRING: \”\” REMOTE_ADDR: 127.0.0.1 REMOTE_HOST: localhost REQUEST_METHOD: […]

Heroku的后台工作解决方案?

我已经在Heroku的旧堆栈(Aspen和Bamboo)上使用了Delayed Job,但是使用他们新的(ish)Cedar堆栈,我想尝试一些更高效的东西。 我正在执行的特定后台工作是对不同运营商(UPS,FedEx,USPS等)的API调用,我通常每小时处理数千个。 我需要能够同时处理作业以快速通过队列。 最重要的是,我想尝试降低成本。 在我以前使用延迟工作的堆栈中,我不得不加快工作人员的工作,这会大大增加我的成本。 那么,在Heroku上,对我来说什么是一个很好的后台工作解决方案?

在Ruby on Rails中发送动态电子邮件提醒?

我对动作管理员比较陌生,但是我已经设置了忘记密码的电子邮件,并让它们作为延迟工作运行。 我想设置动态电子邮件提醒,用户可以在活动开始前选择“提醒我_ __分钟/小时/天”这样的选项,并让它发送电子邮件提醒。 我不想让它完全开放,并有一个下拉列表,其中包含以下选项: 在活动时提醒我 在活动开始前5/15/30分钟提醒我 在活动开始前1小时提醒我 在活动开始前一天提醒我 实现这一目标的最佳/最有效方法是什么? 延迟的作业run_atfunction是否可以完成此操作,或者我是否应该为每个下拉选项编写一个交付方法,调用一些内容来表示发送邮件 event_start – 60.minutes 或类似的东西? 我的应用程序使用Rails 3.0.11,这与每日cron任务不同,因为它们可以随时运行。 此外,如果用户能够编辑更改开始日期和结束日期的事件日期,是否会导致延迟作业出现任何问题?