2012-02-08 13 views
12

私のRails 3.1アプリは、8amで最大1ウェブdyno、次に5pmで0ウェブダイノーにスケールアップします。Heroku Cedar:時間帯に基づいてWEBダイノスを調整する方法

しかし、私は有料サービスに登録したくないので、インターネットに接続されている自宅のコンピュータにはカウントできません。

Herokuスケジューラがこれを簡単にするように思えます。迅速なソリューションやリンクはありますか?

+0

明確にする/簡略化する:rubyから、あなたの既存のアプリに1つの新しいWeb dynoを追加するにはどうすればよいですか? – dnszero

答えて

11

答えが「はい」あなたは、スケジューラからこれを行うことができ、あなたが答えを知っていれば、それは些細だ次のとおりです。

  1. アプリの名前でHerokuのコンフィグVAR追加:Herokuの設定:APP_NAMEを追加します。何とか
  2. をHerokuのPS:規模のウェブ= 2
  3. はlibに/タスク/ scheduler.rakeにrakeタスクを追加します。

  4. アプリをアップ/ダウンスケール手動で、検証するために、あなたのGemfile
  5. に 'Herokuの' の宝石を追加

    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 
    
  6. スケジューラのアドオンを追加します:Herokuのアドオンを:スケジューラを追加:標準

  7. はどんな時に「すくいspin_up」を追加するスケジューラのWebインターフェイスを使用し
  8. のようなあなたは熊手spin_downタスクを追加し、それをスケジュールしますいつでも

注:私は、アプリケーション名の特定可能にする他の方法を見つけることができなかった(と私は私のアプリのための「ステージング」と「生産」の環境を使用しているため ステップ1が必要とされている

手順3が必要な場合は、rubyコマンドのエラーが表示されるので、この操作の結果として料金が請求されることに同意する必要があります。

手順4では、 heroku gemを使ってAPIキーを使ってこれを行う方法に関するドキュメントを見つけることができないので、user/passが必要です。

これは他の人に役立つことを願っています!

+0

これはエラー "RestClient :: UnprocessableEntity:422 Unprocessable Entity"を返します – istan

+0

手順3をスキップしましたか?さもなければ、私はそれが何を引き起こすのか全く分かりません(同じスタックを想定しています)。しかし、あなたはエラーを救済し、それが何を言っているのか見ることができます。 – dnszero

+0

あなたが422を手に入れているのなら、それはあなたの仕事のプロセスが何を意味するのかを英雄に話していないことを意味します。 herokuのドキュメントをご覧くださいhttps://devcenter.heroku.com/articles/delayed-jobここでは、あなたのワーカー定義を含むProcfileを作成するよう指示します。 – joshuacronemeyer

0

シダースタックで実行している場合は、プロファイルを変更してデプロイすることなく、Webダイノスをゼロにすることはできません。

また、1か月間無料のdyno(750 dyno時間、実際には1ヶ月以上)を取得すると、なぜ気になるのですか?

3

あなたは、タスクが8で実行するように設定している必要があるだろう

heroku ps:scale web=1

を経由して戻って1に

heroku ps:scale web=0

かによってゼロにあなたのウェブプロセスを拡張することができますそれはそれをスケールアップし、17で実行するものはそれをスケールダウンする。 Herokuは、Heroku Schedulerを使用するためにあなたのアカウントを確認する(クレジットカードの詳細を入力する)ことを要求するかもしれませんし、あなたのアプリの中にHerokuの宝石とあなたのHerokuの資格も持っていなければなりません。

ニールのように、あなたは1か月に750hrsを無料で手に入れて、次の月にロールオーバーすることはできません。

+1

私の悪い、私は1 dynoから2までスケールすることを意味しました。私の目標は、勤務中の迷惑な20秒のスピンアップ時間を避けることです(そしてPingdomなどでハッキングするのではなく、 – dnszero

11

ちょうどこのアプローチ(@dnszeroの上の良い答え)を実装して、私はHerokuの新しいAPIで答えを更新すると思った。

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のコンフィグ変数としてあなたのアプリ名を追加し、Herokuの-API(0.3.5)

0

それとも、あなたの代わりに、独自の実装のサービスを利用したい場合は、http://scaledynos.herokuapp.com/を試してみてください - それは、拡大縮小日

の時間に基づいて、
1

私は2017年にこれを実装することに決めました。受け入れられた答えによって使用されたHerokuの宝石は、 'platform-api'宝石のために廃止されました。私はちょうど私がもっと最新の答えで他の投稿を見たことがないので、私が働いているものを投稿するだろうと思った。ここで

は、私が「形成」セクションで、自分のdocsあたりとして、プラットフォームのAPIへの適切なヘッダとPATCH要求を行う「httparty」宝石を使用し2の数に私のウェブdynosをスケーリング私のすくいファイルです。 @漣の答えに更新として

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>}] 
}) 
関連する問題