【发布时间】:2013-02-18 06:17:36
【问题描述】:
是否可以在 Heroku 上免费运行延迟作业?
我正在尝试在 Heroku 上使用 delayed_job_active_record。但是,它需要worker dyno,如果我全时打开这个测功机,它会花钱。
我认为使用 Unicorn 并让其工作人员运行延迟的工作而不是 Heroku 工作人员,在成功运行所有工作的同时不会花费任何成本。然而,独角兽工人似乎不会自动开始“工作”。
我的 Procfile 中有以下内容。
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: bundle exec rake jobs:work
以及我的 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
延迟的工作似乎只有在我将 Heroku 工作程序从 0 扩展到 1 时才有效。 再说一遍,难道不能用 Unicorn 工人代替 Heroku 工人来做延迟的工作吗?
我是否必须使用像 workless 这样的 gem 在 Heroku 上免费运行延迟作业? (reference)
【问题讨论】:
-
我使用无用的宝石。仅在需要时使用宝石来帮助解雇工人应该没有问题。它是一颗宝石! ;-)
标签: ruby-on-rails heroku delayed-job