如何在Heroku免费运行延迟作业?
我正在尝试在Heroku上使用delayed_job_active_record
。然而,它需要一个worker dyno
,如果我全天开启这个dyno,就需要花钱。
我想通过使用Unicorn并使其工作进程运行延迟作业来解决这个问题,这样就不需要花费任何费用,同时成功运行所有作业。但是,Unicorn工作进程似乎不会自动开始“工作”。
我的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 worker从0扩展到1时才能正常工作。再次问,是否不可能使用Unicorn工作进程来执行延迟作业而不是Heroku worker?
我是否必须使用像
workless
这样的宝石来免费在Heroku上运行延迟作业?(参考)