2012-02-08 34 views
12

के समय के आधार पर वेब डायनास को कैसे स्केल करें, मैं चाहता हूं कि मेरा रेल 3.1 ऐप 8 बजे 1 वेब डिनो तक स्केल करे, फिर 5 बजे नीचे 0 वेब डायनोस तक।हेरोोकू सीडर:

लेकिन, मैं एक सशुल्क सेवा के लिए साइन अप नहीं करना चाहता हूं, और मैं इंटरनेट से जुड़े अपने घर कंप्यूटर पर भरोसा नहीं कर सकता।

ऐसा लगता है जैसे हीरोोकू शेड्यूलर को यह छोटा बनाना चाहिए। कोई त्वरित समाधान या लिंक?

+0

स्पष्टीकरण/सरलीकृत करने के लिए: रूबी से, आप अपने मौजूदा ऐप में 1 नया वेब डिनो कैसे जोड़ते हैं? – dnszero

उत्तर

11

जवाब 'हां' आप अनुसूचक से ऐसा कर सकते हैं और एक बार आप इस सवाल का जवाब पता है कि यह तुच्छ है:

  1. अपने अनुप्रयोग नाम के साथ एक Heroku config वर जोड़ें: Heroku config: APP_NAME जोड़ें: blah
  2. 'Heroku' अपने Gemfile
  3. को मणि जोड़े सत्यापित करने के लिए में, मैन्युअल/नीचे अपने अनुप्रयोग पैमाने: Heroku पुनश्च: पैमाने वेब = 2
  4. /कार्य लिब के लिए एक रेक कार्य जोड़ें/scheduler.rake:

    अनुसूचक जोड़ने: 10
    desc "Scale up dynos" 
    task :spin_up => :environment do 
        heroku = Heroku::Client.new('USERNAME', 'PASSWORD') 
        heroku.ps_scale(ENV['APP_NAME'], :type=>'web', :qty=>2) 
    end 
    # Add a similar task to Spin down 
    
  5. जोड़े समयबद्धक एडऑन: Heroku एडऑन मानक

  6. उपयोग समयबद्धक वेब इंटरफेस "रेक spin_up" जो कुछ समय में आप की तरह
  7. के लिए एक रेक spin_down कार्य जोड़ें और यह अनुसूची में जोड़ने के लिए जब कभी।

नोट्स: क्योंकि मैं किसी अन्य तरीके से ऐप्लिकेशन का नाम के कुछ होने के लिए नहीं मिल सकता है चरण 1 की जरूरत है (और मैं अपने ऐप्स के लिए 'मचान' और 'उत्पादन' वातावरण का उपयोग

चरण 3 आवश्यक है क्योंकि अन्यथा रूबी कमांड त्रुटियों के कारण यह आवश्यक है कि आप पहले सहमत हों (हां/नहीं प्रतिक्रिया के माध्यम से) कि आपसे इस कार्रवाई के परिणामस्वरूप पैसे लिया जाएगा।

चरण 4 में, मैं नहीं कर सका ' किसी भी दस्तावेज़ को यह नहीं पता कि उसे एपीआई कुंजी के साथ हेरोकू मणि के माध्यम से कैसे किया जाए, ऐसा लगता है कि उपयोगकर्ता/पास की आवश्यकता है।

आशा है कि यह किसी और की मदद करेगी!

+0

यह रिटर्न त्रुटि "RestClient :: UnprocessableEntity: 422 अनप्रचारनीय इकाई" – istan

+0

क्या आपने चरण 3 छोड़ दिया था? अन्यथा, मुझे नहीं पता कि इसका कारण क्या होगा (उसी स्टैक और सभी को मानते हुए)। लेकिन आप त्रुटि को बचाने की कोशिश कर सकते हैं और देख सकते हैं कि यह क्या कहता है। – dnszero

+0

यदि आपको 422 मिल रहा है तो इसका मतलब है कि आपने उसे नहीं बताया है कि आपकी कार्यकर्ता प्रक्रिया क्या है। यहां Heroku दस्तावेज़ों पर एक नज़र डालें https://devcenter.heroku.com/articles/delayed-job यह आपको एक प्रोफाइल बनाने के लिए बताएगा जिसमें आपकी कार्यकर्ता परिभाषा शामिल है। – joshuacronemeyer

0

यदि आप देवदार स्टैक पर चल रहे हैं, तो आप procfile और तैनाती को बदले बिना शून्य वेब डायनास तक स्केल करने में सक्षम नहीं होंगे।

इसके अलावा, अगर आपको एक महीने में एक मुफ्त डिनो मिल जाए तो परेशान क्यों करें (750 डिनो घंटे, वास्तव में एक महीने से थोड़ा अधिक)?

3

आप के माध्यम से

heroku ps:scale web=1

आप तो एक काम 8 पर चलने के लिए निर्धारित किया है होगा

heroku ps:scale web=0

या वापस 1 से शून्य करने के लिए अपने वेब प्रक्रिया माप सकते हैं जो इसे बढ़ाता है और एक जो 17 रन पर चलता है जो इसे कम करता है। हेरोकू को हेरोोकू शेड्यूलर प्लस का उपयोग करने के लिए अपने खाते को सत्यापित करने की आवश्यकता हो सकती है (यानी क्रेडिट कार्ड विवरण दर्ज करें) तो आपको अपने ऐप और आपके हेरोकू क्रेडेंशियल्स के अंदर हीरोोकू मणि रखना होगा ताकि यह आपके ऐप को चालू या बंद कर सके।

लेकिन नील की तरह कहते हैं - आपको एक महीने में 750 घंटे मिलते हैं जो अगले महीने में नहीं जा सकते हैं, इसलिए इसे हर समय क्यों नहीं चलते?

+1

मेरा बुरा, मेरा मतलब 1 डायनो से 2 तक स्केल करना था। मेरा लक्ष्य कार्यदिवस के दौरान परेशान 20 सेकंड स्पिन अप समय से बचने के लिए है (और पिंगडम के साथ हैकिंग करने के बजाए, उसके लिए भुगतान करके हेरोकू का समर्थन करने के लिए)। – dnszero

11

बस इस दृष्टिकोण को लागू किया गया (@dnszero से ऊपर अच्छा जवाब), सोचा कि मैं हरोकू के नए एपीआई के साथ जवाब अपडेट करूँगा।

अपने अनुप्रयोग नाम एक Heroku config चर

require 'heroku-api' 
    desc "Scale UP dynos" 
    task :spin_up => :environment do 
    heroku = Heroku::API.new(:api_key => 'YOUR_ACCOUNT_API_KEY') 
    heroku.post_ps_scale(ENV['APP_NAME'], 'web', 2) 
    end 

यह Heroku (2.31.2) के साथ है के रूप में, Heroku-api (0.3.5)

1

भी देखें यह पूरा सार है, जो भी सही कमांड के साथ सौदों Heroku अनुसूचक से उपयोग करने के लिए: https://gist.github.com/maggix/8676595

0

या, आप अपने खुद के लागू करने के बजाय एक सेवा का उपयोग करने, http://scaledynos.herokuapp.com/ कोशिश करना चाहते हैं तो - यह

दिन के समय के आधार पर तराजू
1

इसलिए मैंने 2017 में इसे लागू करने का फैसला किया और देखा कि स्वीकार किए गए उत्तर द्वारा उपयोग किए जाने वाले हेरोकू मणि को 'प्लेटफार्म-एपीआई' मणि के पक्ष में हटा दिया गया है। मैंने सोचा कि मैं पोस्ट करूंगा जो मेरे लिए काम करता है, क्योंकि मैंने किसी भी अन्य पोस्ट को अधिक अद्यतित उत्तर के साथ नहीं देखा है।

यहां मेरी रेक फ़ाइल है जो 2 की गिनती के लिए मेरे वेब डायनास को स्केल करती है। मैंने "फॉर्मेटेशन" सेक्शन में अपने docs के अनुसार प्लेटफार्म एपीआई में उचित शीर्षकों के साथ पैच अनुरोध करने के लिए 'httparty' मणि का उपयोग किया था। ।

require 'platform-api' 
require 'httparty' 

desc "Scale UP dynos" 
task :scale_up => :environment do 
    headers = { 
    "Authorization" => "Bearer #{ENV['HEROKU_API_KEY']}", 
    "Content-Type" => "application/json", 
    "Accept" => "application/vnd.heroku+json; version=3" 
    } 

    params = { 
    :quantity => 2, 
    :size => "standard-1X" 
    } 

    response = HTTParty.patch("https://api.heroku.com/apps/#{ENV['APP_NAME']}/formation/web", body: params.to_json, headers: headers) 

    puts response 
end 
0

@ रेन के जवाब के लिए एक अद्यतन के रूप में, Heroku के Platform API gem यह वास्तव में आसान बनाता है।

heroku = PlatformAPI.connect_oauth(<HEROKU PLATFORM API KEY>) 
heroku.formation.batch_update(<HEROKU APP NAME>, {"updates" => 
    [{"process" => <PROCESS NAME>, 
    "quantity" => <QUANTITY AS INTEGER>, 
    "size" => <DYNO SIZE>}] 
}) 
संबंधित मुद्दे