2012-03-08 12 views
18

का उपयोग कर रहा है कि कैसे की (this article से लिया गया) बराबर कॉल करने के लिए खोजने के लिए संघर्ष कर रहा हूँ Heroku कार्यकर्ता को पुनः आरंभ करने:कैसे Heroku मणि

heroku restart worker.1 

heroku gem का उपयोग कर। मुझे लगता है कि restart और ps_restart विधियां हैं लेकिन यह नहीं देखता कि मैं केवल 1 कार्यकर्ता को पुनरारंभ करने के लिए कहां निर्दिष्ट कर सकता हूं, न कि संपूर्ण ऐप।

उत्तर

14

पुनः आरंभ करने की मैं एक क्रॉन का उपयोग कर अनुप्रयोग के भीतर से विशिष्ट कार्यकर्ता पुनरारंभ कर रहा हूँ आदेश है। इस तरह:

heroku = Heroku::Client.new(ENV['APP_USERNAME'], ENV['APP_PASSWORD']) 
heroku.ps_restart(ENV['APP_NAME'], :ps =>'worker.1') 

Heroku API Doc

40

यहाँ किसी विशेष प्रक्रिया

heroku ps:restart worker.1 --app APP_NAME 
+0

चूंकि हम पहले से ही इस सवाल से जानते हैं कि विशेष प्रक्रिया 'कार्यकर्ता' है, हम इसे 'हेरोकू ps: पुन: प्रारंभ करने के लिए कार्यकर्ता .1 --app APP_NAME' कहने के लिए कह सकते हैं। –

5

उपयोग से "Heroku-api" मणि, नहीं "Heroku" मणि। "Heroku" मणि का उपयोग इस तरह से अभी भी काम करता है (आज के रूप में), लेकिन बहिष्कृत है। इसका मतलब कंसोल के माध्यम से किया जाना है।

https://github.com/heroku/heroku.rb

एपीआई मणि उपयोग करने के लिए बहुत आसान लग रहा है। , Heroku वेबसाइट से आप API कुंजी पकड़ो अपने अनुप्रयोग config चर में रख, और कॉल:

require 'heroku-api' 
heroku.post_ps_restart('app', 'ps' => 'web.1') # restart 'web.1' process for 'app' app 
1

वर्तमान में, आप Heroku से "platform-api" मणि (documentation here) लेने के लिए, क्योंकि "Heroku" मणि है अब और काम नहीं कर रहे हैं और "हेरोकू-एपीआई" मणि का उपयोग हेरोकू लीगेसी एपीआई के साथ बातचीत करने के लिए किया जाता है। लीगेसी API 15 अप्रैल समाप्त हो जाएंगी, 2017

सबसे पहले आप Heroku टूलबेल्ट कमांड लाइन टूल के माध्यम से एक OAuth टोकन बनाने के लिए:

$ heroku plugins:install heroku-cli-oauth 
$ heroku authorizations:create -d "Platform API example token" 
Created OAuth authorization. 
    ID:   2f01aac0-e9d3-4773-af4e-3e510aa006ca 
    Description: Platform API example token 
    Scope:  global 
    Token:  e7dd6ad7-3c6a-411e-a2be-c9fe52ac7ed2 

उपयोग टोकन मूल्य जब एक ग्राहक instantiating:

require 'platform-api' 
heroku = PlatformAPI.connect_oauth('e7dd6ad7-3c6a-411e-a2be-c9fe52ac7ed2') 

पुनः आरंभ इस आदेश के साथ एक विशिष्ट dyno:

heroku.dyno.restart(app_id_or_app_name, dyno_id_or_dyno_name) 

या एक पुनः आरंभ इस आदेश के साथ करेंगे:

heroku.dyno.restart_all(app_id_or_app_name) 

आप

heroku.app.list 

साथ अपने सभी एप्लिकेशन की आईडी प्राप्त कर सकते हैं और

heroku.dyno.list(app_id_or_app_name) 
+0

क्या अब HEROKU_API_KEY कॉन्फ़िगरेशन var का उपयोग करने की पुरानी विधि अनावश्यक है? क्या मुझे OAuth टोकन को एक नई कॉन्फ़िगरेशन var के रूप में सहेजना चाहिए? – Tom

0

के माध्यम से एप्लिकेशन की dynos की आईडी coderuby का जवाब एक पर विस्तार करने के लिए बिट:

heroku = PlatformAPI.connect_oauth(ENV['PLATFORM_API_TOKEN']) 

worker_ids = heroku.dyno 
    .list(ENV['HEROKU_APP_NAME']) 
    .select { |dyno| dyno['type'] == 'worker' } 
    .map { |dyno| dyno['id'] } 

worker_ids.each do |id| 
    heroku.dyno.restart(ENV['HEROKU_APP_NAME'], id) 
end 

उचित पर्यावरण चर सेट करने के बाद। आप इसे रेक रेक में शामिल कर सकते हैं, फिर जब आप फिट दिखाई देते हैं तो हेरोकू का शेड्यूलर इसे चलाता है।