Tag: 延迟作业

每个RAILS_ENV运行多个delayed_job实例

我正在使用多RAILS_Env的Rails应用程序 env_name1: adapter: mysql username: root password: host: localhost database: db_name_1 env_name2: adapter: mysql username: root password: host: localhost database: db_name_2 … .. . 我正在使用delayed_job(2.0.5)插件来管理异步和背景工作。 我想为每个RAILS_ENV启动多个delayed_job: RAILS_ENV=env_name1 script/delayed_job start RAILS_ENV=env_name2 script/delayed_job start .. 我注意到我只能为第二个运行一个delayed_job实例,我有这个错误“错误:已经有一个或多个程序正在运行” 我的问题:每个RAILS_ENV都不可能运行多个delayed_job实例吗? 谢谢

单工dyno的并行背景任务

我们有一个Rails应用程序,其中某些请求在具有delayed_job的worker dyno上触发长时间运行的任务,而前端轮询直到它收到结果。 我们的流量虽小但增长很快,而且任务通常只需几秒钟即可完成,但最多可能需要一分钟。 现在,每个web和worker dyno都应该足以处理我们的负载。 问题是,delayed_job队列不会并行处理作业,因此较长的任务最终会阻碍其后面的任务。 我们正在寻找的是类似Unicorn的后端,其中单个工作人员dyno可以同时处理多个任务。 因为它是Rails,我们正在寻找多进程而不是multithreading的东西。 (我们尝试在procfile中创建多个worker条目 – 这在本地开发框中工作,但不在Heroku上工作) Procfile: web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb # Multiple workers defined here doesn’t translate into multiple processes on single worker dyno: worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work 这篇Heroku文章建议使用resque-pool gem作为解决方案。 这是唯一的解决方案,还是delayed_job也可以用于并行后台作业?

Rails背景图片上传

我正在使用“carrierwave”gem来上传图像文件,还使用“carrierwave backgrounder”处理上传+在后台使用RMagick处理图像(我使用延迟作业)。 一切都像魅力一样。 除了一件事 – 我想上传图像并在上传表单下显示它们(因此,所有内容都发生在同一页面上)。 所以,基本上,会发生什么 – 因为上传和图像处理相对较慢,到发布后页面呈现时 – 图像本身还没有准备好:所以image_tag显示了破碎的“资产”链接(href =“资产”)。 等待2-3秒(几次刷新)后,图像出现在屏幕上。 所以,我的问题是 – 我可以以某种方式显示“ 加载 ”动画(或文本,或其他图片 – 无关紧要) 而不是破碎(尚未提供)的图像,并且一旦准备就绪 – 将图像显示到用户。 这可以在没有AJAX的情况下完成吗? 或者我应该考虑用AJAX重新做它? 对不起,长话故事。 希望对你有所帮助! 提前致谢! 🙂

PaperTrail:在控制器上下文之外的info_for_paper_trail

我正在使用paper_trail gem来对我的模型进行版本控制。 到目前为止,我的模型依赖于ApplicationController的info_for_paper_trail方法: class ApplicationController < ActionController::Base # Extra columns to store along with PaperTrail `versions` def info_for_paper_trail { revision_id: @revision.id, revision_source_id: @revision_source.id } end end 这在控制器的上下文中工作得很好,但有没有办法可以在控制器的上下文之外复制这种东西(例如,延迟的工作)? 我尝试创建一个名为revision的虚拟属性并将proc传递给has_paper_trail ,但是错误的method not foundexception的method not found : # Attempt to solve this in the model class Resource < ActiveRecord::Base # Virtual attribute attr_accessor :revision # Attempt to use […]

Rails / delayed_job – 想要加载最新版本的作业类

我正在使用Rails中的delayed_job插件进行后台处理,而我在Rails中遇到的“敏捷开发”中遇到了一个小问题… 通常在rails中如果我遇到错误/想要添加一些新function – 我只需添加一些代码并刷新页面并运行新代码。 使用delayed_job,似乎没有重新加载作业类…如果作业失败,我去修复错误并再次激活作业,旧代码再次运行。 有没有办法让delayed_job在调用之前加载最新版本的作业类? 万一这与它有什么关系 – 我知道delayed_job在声明作业/运行作业的方式上有几个不同的选项: 我的作业类位于Rails的lib目录中,声明如下: class FooJob < Struct.new(:foo_id) 我从控制器调用这样的工作: Delayed::Job.enqueue(FooJob.new(params[:id]))

Rails 4.2从活动作业中获得延迟的作业ID

知道如何从ActiveJob入队获取Delayed::Job id吗? 当我排队工作时,我用@job_id返回一个ActiveJob::Base的实例,但该工作ID似乎是ActiveJob的内部。 到目前为止,我最好的猜测就是走下最近创建的工作: active_job_id = GenerateReportJob.perform_later(self.id).job_id delayed_job = Delayed::Job.order(id: :desc).limit(5).detect do |job| YAML.load(job.handler).job_data[‘job_id’] == active_job_id end 但这似乎是各种各样的hacky。 有点惊讶的ActiveJob没有从Delayed::Job返回ID,特别是因为这是在作业入队时显式返回的内容。 ==编辑 看起来我不是唯一一个( https://github.com/rails/rails/issues/18821 )

适用于Image Heavy App的最佳Ruby on Rails架构

我正在构建一个允许同时上传大量照片的应用程序,并想知道解决此问题的最佳设置。 这是我到目前为止使用的: Jquery文件上传:允许用户拖放图像 CarrierWave:处理图像并使用ImageMagickresize Amazon S3:CarrierWave通过Fog将图像上传到Amazon S3 Heroku:用于托管 我想允许用户能够将大量图像拖放到页面上,然后在后台进行上传时导航到其他页面。 我还想在完成上传时显示图片。 我不希望这个过程锁定Heroku dynos,所以我可能需要将工作转移到后台工作,但我不确定如何使用我的情况。 这类应用程序的最佳设置是什么? 我应该使用什么背景工人gem? Cloudinary是个好主意吗?

Net :: SSH适用于生产rails控制台,AuthenticationFailed来自生产webapp

我有一个rails应用程序,用户可以在其中提交表单,然后通过ssh连接到远程服务器以调用脚本。 最终我打算使用delayed_job或类似的东西,但即使是一个简单的测试我也无法让它在生产中工作。 奇怪的是,Net :: SSH在生产环境中从控制台运行得很好,但是当我在生产环境中提交表单时,它失败了。 控制台和webapp都可以在开发中正常运行。 错误: Net :: SSH :: AuthenticationFailed(my_ssh_username): app / models / branch.rb:69:在`ssh_to_machine’中 app / controllers / branches_controller.rb:55:在`update’中 控制器的更新动作: def update @branch = Branch.find(params[:id]) if @branch.update_attributes(params[:branch]) @branch.ssh_to_machine(@branch.hostname, @branch.user_name, @branch.command_to_run) redirect_to @branch, :notice => “Update request now processing.” else render :action => ‘edit’ end end 方法我正在调用,主要是从Net :: SSH api示例中复制/粘贴: def ssh_to_machine(host_name, user_name, […]

为什么在delayed_job中关闭时区?

在我的Rails应用程序中,当我使用delayed_job gem创建后台作业时,我将所有时间偏移6小时。 我的理解是delayed_job使用你的时区 ,但它就像是使用了错误的时区 。 而不是距离UTC 6小时( CST是我的时区),这是-12小时! 这里有一些视图代码来说明。 注意: Time.now给出2014-03-04 23:26:55 -0600 Time.now.utc给出2014-03-05 05:26:55 UTC 但delayed_job几秒前的想法是2014-03-04 17:26:53 -0600 我的看法: #delayed_jobs/index.html.erb All Background Jobs The time now is: The time UTC is: ID Queue Created At Run At 输出: 我可以通过以下三种方式创建作业,并获得相同的created_at时间: MyClass.delay.foo MyClass.delay(run_at: 0.minutes.from_now).foo MyClass.delay(run_at: 0.minutes.from_now.getutc).foo 我的配置有: #config/application.rb config.time_zone = ‘Central Time (US & Canada)’ config.active_record.default_timezone […]

delayed_job的exception_notification

对于delayed_job,是否有类似exception_notification的gem? 最好与REE-1.8.7和Rails 2.3.10一起使用。