2013-03-04 48 views
18

是否有可能在Heroku上免費延期工作?在Heroku上免費延期工作

我試圖在Heroku上使用delayed_job_active_record。然而,它需要一個worker dyno,如果我把這個測功機全部開啓,這將會花錢。

我以爲使用獨角獸,並讓其工作人員運行延遲工作,而不是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 再次,是不是可以使用工作獨角獸的工人而不是Heroku的工人做延期工作?

我必須使用像workless這樣的寶石在Heroku上免費運行延遲工作嗎? (reference

+2

我使用沒有工作的寶石。只有在需要時才能使用寶石來幫助激發員工,這應該沒有問題。它的作品是一顆寶石! ;-) – mjnissim 2013-08-11 12:30:01

回答

14

拆分這樣的過程可能招致的問題 - 你最好的選擇是不是嘗試並獲得其「自由」,但使用這樣的http://hirefireapp.com/當有工作進行降低,這將啓動一個工人成本顯着,而不是每天24小時運行一名工人。

另請注意,Heroku只會爲您自動啓動一個'web'進程,啓動其他指定進程是一項手動任務。

+0

+1確實非常有幫助。謝謝! – abhijit 2013-03-04 08:43:51

+0

什麼樣的問題? – Zaz 2013-08-19 15:21:54

+0

我沒有使用它,但沒有工作的寶石看起來像這些服務一樣:https://github.com/lostboy/workless – 2013-12-16 19:46:49

5

理想的情況下,沒有直接的方式來獲得這種免費的,但你會發現很多的解決方法之一可以享受免費的後臺作業。其中之一是http://nofail.de/2011/07/heroku-cedar-background-jobs-for-free/

此外,如果你打算使用resque這是一個很好的選擇背景工作,你將需要redis,免費與納米版本=>https://addons.heroku.com/redistogohttps://devcenter.heroku.com/articles/queuing-ruby-resque

簡單的辦法就是買一個賽道的工作人員,而您的Web測功機將是免費的。

如果您需要更多幫助,請允許我。

感謝

1

如果您只有一名網絡工作者,Heroku會在一小時內處於非活動狀態時進入休眠狀態。

另外,Heroku每天至少會重新啓動所有dynos。

這使得很難做一個內部ruby調度。它必須至少使用持久性存儲(例如數據庫)。

+2

可以防止Heroku空轉。安裝免費的New Relic附加組件。它有一個可用性監視器功能,可以每分鐘對您的站點執行兩次ping命令,從而防止dyno空轉。 – narzero 2013-12-10 08:17:52

5

您可以使用Heroku Scheduler使用命令

rake jobs:workoff 

這樣的作業可以在您的Web測功機運行運行的作業。根據Delayed_Job docs,該命令將運行所有可用的作業並退出。

例如,您可以配置調度程序每隔10分鐘運行一次此命令,並且當沒有作業排隊時,它對應用程序的性能沒有明顯影響。另一個好主意是安排它每天以較低的訪問速度運行。