是否可以免费在 Heroku 上运行延迟作业?
我正在尝试使用 delayed_job_active_record
在 Heroku 上。但是,它需要 worker dyno
如果我全时打开这个测功机,那会花钱。
我认为使用 Unicorn 并让其工作人员运行延迟的工作而不是 Heroku 工作人员,在成功运行所有工作的同时不会花费任何成本。然而, unicorn worker 似乎不会自动开始“工作”。
我的 中有以下内容文件 .
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 worker 代替 Heroku worker 来做延迟的工作吗?
我必须使用像
workless
这样的 gem 吗?免费在 Heroku 上运行延迟作业? (reference)
最佳答案
像这样拆分过程可能会产生问题 - 你最好的选择是不要尝试让它“免费”,而是使用像 http://hirefireapp.com/ 这样的东西。当有工作要执行时,它将启动一个工作人员,从而显着降低成本,而不是 24x7 运行一个工作人员。
另请注意,Heroku 只会为您自动启动“网络”进程,启动其他命名进程是一项手动任务。
关于ruby-on-rails - 免费在 Heroku 上运行延迟作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15196833/