Max*_*s S 19 ruby-on-rails heroku delayed-job
是否可以免费在Heroku上运行延迟的工作?
我正试图delayed_job_active_record
在Heroku 上使用.然而,它需要一个worker dyno
,如果我把这个dyno打开全职,它会花钱.
我认为使用Unicorn并使其工作人员延迟工作而不是Heroku工作人员,在成功运行所有工作的同时不会花费任何成本.但是,Unicorn工作人员似乎并没有自动开始"工作".
我的Procfile中有以下内容.
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: bundle exec rake jobs:work
Run Code Online (Sandbox Code Playgroud)
和我的unicorn.rb中的以下内容
worker_processes 3
timeout 30
preload_app true
before_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
Rails.logger.info('Disconnected from ActiveRecord')
end
# If you are using Redis but not Resque, change this
if defined?(Resque)
Resque.redis.quit
Rails.logger.info('Disconnected from Redis')
end
sleep 1
end
after_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.establish_connection
Rails.logger.info('Connected to ActiveRecord')
end
# If you are using Redis but not Resque, change this
if defined?(Resque)
Resque.redis = ENV['REDIS_URI']
Rails.logger.info('Connected to Redis')
end
end
Run Code Online (Sandbox Code Playgroud)
当我将Heroku工作者从0扩展到1时,延迟工作似乎才有效.再次,是否不可能使用Unicorn工作人员而不是Heroku工作人员来完成延迟工作?
我是否必须使用宝石workless
来免费在Heroku上运行延迟的工作?(参考)
Joh*_*non 15
拆分这样的过程可能会产生问题 - 你最好的选择是不要尝试并免费获得它,而是使用像http://hirefireapp.com/这样的东西来启动一个工人,当有工作要做,显着降低成本而不是全天候运行工人.
另请注意,Heroku只会为您自动启动"Web"进程,启动其他命名进程是一项手动任务.
小智 6
您可以使用Heroku Scheduler使用该命令运行作业
rake jobs:workoff
Run Code Online (Sandbox Code Playgroud)
这样,作业就可以在您的web dyno中运行.根据Delayed_Job文档,此命令将运行所有可用作业并退出.
例如,您可以将调度程序配置为每10分钟运行一次此命令,并且当没有作业排队时,它对应用程序的性能没有明显影响.另一个好主意是安排它以较低的访问率每天运行.
理想情况下,没有直接的方式来获得这个免费,但你会发现很多可以做的工作来享受免费的后台工作.其中一个是http://nofail.de/2011/07/heroku-cedar-background-jobs-for-free/
此外,如果您计划使用resque,这是后台工作的绝佳选择,您将需要redis免费纳米版本=> https://addons.heroku.com/redistogo.https://devcenter.heroku.com/articles/queuing-ruby-resque
简单的解决方案是为工人购买一个dyno,而你的网络dyno将是免费的.
如果您需要更多帮助,请告诉我.
谢谢
归档时间: |
|
查看次数: |
10354 次 |
最近记录: |