Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Heroku上免费运行延迟作业_Ruby On Rails_Heroku_Delayed Job - Fatal编程技术网

Ruby on rails 在Heroku上免费运行延迟作业

Ruby on rails 在Heroku上免费运行延迟作业,ruby-on-rails,heroku,delayed-job,Ruby On Rails,Heroku,Delayed Job,可以在Heroku上免费运行延迟作业吗? 我正试图在Heroku上使用延迟作业\u活动\u记录。然而,它需要一个工人动态系统,如果我全职打开这个动态系统,那就要花钱了 我认为使用Unicorn并让它的工人运行延迟作业而不是Heroku工人,在成功运行所有作业的同时,不会产生任何成本。然而,独角兽工人似乎不会自动开始“工作” 我的程序文件中有以下内容 web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb worker: bundle ex

可以在Heroku上免费运行延迟作业吗?

我正试图在Heroku上使用
延迟作业\u活动\u记录。然而,它需要一个
工人动态系统
,如果我全职打开这个动态系统,那就要花钱了

我认为使用Unicorn并让它的工人运行延迟作业而不是Heroku工人,在成功运行所有作业的同时,不会产生任何成本。然而,独角兽工人似乎不会自动开始“工作”

我的程序文件中有以下内容

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时,延迟作业似乎才起作用。 再说一次,难道不可能用独角兽工人代替Heroku工人来做延迟的工作吗


我必须使用像
无工作
这样的gem在Heroku上免费运行延迟作业吗?()

理想情况下,没有直接的方法可以免费获得这项服务,但你会发现有很多方法可以让你享受免费的背景工作。其中之一就是

此外,如果您计划使用resque,这是后台工作的最佳选择,您将需要redis,它随nano version=>免费提供

简单的解决方案是为员工购买一个动态链接,而您的web动态链接是免费的

如果你需要更多的帮助,请告诉我


谢谢

像这样拆分流程可能会引发问题-你最好的选择是不要尝试“免费”获得它,而是使用这样的方法,当有工作要执行时启动一名员工,从而显著降低成本,而不是全天候运行一名员工


另外请注意,Heroku只会为您自动启动一个“web”进程,启动其他命名进程是一项手动任务。

如果您只有一个web worker,Heroku将在它不活动一小时时休眠它

此外,Heroku将至少每天重新启动一次所有dynos


这使得在ruby调度器中执行调度变得很困难。它必须至少使用持久性存储(例如数据库)。

考虑使用无工作gem:

您可以使用该命令运行作业

rake jobs:workoff
这样,作业就可以在您的web dyno中运行。根据,此命令将运行所有可用作业并退出


例如,您可以将调度程序配置为每10分钟运行一次此命令,当没有作业排队时,它不会对应用程序的性能产生明显的影响。另一个好主意是安排它每天以较低的访问速率运行

我使用无工作宝石。只有在需要的时候,才可以使用宝石来帮助激发员工的热情。它是宝石!;-)什么样的问题?我没有使用它,但是无工作的gem看起来和这些服务一样:所以,例如,在扩展web和worker dynos之后,我必须运行“heroku rake jobs:work”?因为它不是由Herokoune做的,所以可以防止Heroku空转。安装免费的NewRelic附加组件。它有一个可用性监视器功能,每分钟将ping你的站点两次,从而防止dyno空闲。那么,如果后台工作程序要在主服务器进程中运行,它的意义何在?