2012-01-18 48 views
5

如果你在Heroku上建立了一個獨角獸,可以和3名工人說。 是否有可能讓2名童工處理網絡請求,還有1名獨角獸子女正在進行後臺工作,如重置隊列或計劃任務?有可能有一個獨角獸子進程隊列,而其餘的在Heroku單Dyno上處理Web請求?

或者那是不恰當的?


現在工作了!

好的,所以使用答案波紋管我設法讓它接受提示,但它首先需要一些修補。這對我來說很有用。

Procfile

web: bundle exec unicorn_rails -p $PORT -c config/unicorn.rb 

unicorn.rb

worker_processes 2 
preload_app true 
timeout 30 

@resque_pid = nil 

before_fork do |server, worker| 
    @resque_pid ||= spawn("bundle exec rake environment resque:work QUEUE=*") 
end 

after_fork do |server, worker| 
    ActiveRecord::Base.establish_connection 
end 

回答

1

這當然是可能的 - 採取http://bugsplat.info/2011-11-27-concurrency-on-heroku-cedar.html讀。我雖然沒有嘗試過,但我很快就會嘗試。從本質上講,你會擁有一個unicorn.rb看起來像

worker_processes 3 
timeout 30 

@resque_pid = nil 

before_fork do |server, worker| 
    @resque_pid ||= spawn("bundle exec rake " + \ 
    "resque:work QUEUES=scrape,geocode,distance,mailer") 
end 

我不能完全肯定的「恰當」,因爲這意味着Heroku的基本上失去了對收入,但他們沒有采取任何阻止這種行爲(我想他們也不會)。

+0

是的,我正在通過bugsplat教程昨晚,但無法讓它拿起隊列... – nverba 2012-01-18 09:25:22

+0

至於適當的,我只是不知道,如果每個分叉過程將不得不相等每個獨角獸大師。我不認爲heroku對獨角獸有任何異議,他們在文檔中多次提到它。畢竟只有1個Dyno在運行。他們更可能反對故意克隆具有共享數據庫的應用程序來規避他們的政策,因爲最終可能會有多個dynos綁定1個免費應用程序。 – nverba 2012-01-18 09:31:29

+0

顯然,測功機最多可以產生15個線程 - 但您需要注意內存使用情況。 – 2012-01-18 10:01:51