目的
Heroku アプリケーションの各種操作は heroku コマンドを介して行うのが標準です。
ここでは Ruby コードで直接 Heroku の API を呼び出して Heroku アプリケーションを管理する方法を紹介します。
この方法を使うと heroku コマンドの実行だけでは簡単にできない情報の参照が可能になります。
この方法を Rake に応用すれば アプリケーションの作成からデプロイまでの運用を簡単に自動化できるようになります。
全ての操作を Ruby コードで書く必要はありません。情報の参照が必要でなければ heroku コマンドの実行が一番簡単です。
前提/共通事項
heroku api のインストール
以下を実行して heroku-api gem を事前にインストールしてください。
gem install heroku-api
API Key の取得
Heroku の API を利用するには Heroku アカウント毎に発行される API Key が必要になります。
そのためには Heroku アカウントを持っていることが大前提です。
Heroku アカウントを作成の上、以下のページにアクセスし「API Key」という項目の値をメモしてください。Heroku API 利用時に使用します。
Heroku::API オブジェクトの取得について
Heroku API を利用するにはまず最初に Heroku::API オブジェクトを作成します。その際、上述した API Key を指定します。
API Key を指定する方法は以下の2つです。
- コンストラクタで指定する。
- HEROKU_API_KEY 環境変数で指定する。
コンストラクタで指定する例を以下に示します。
require 'heroku-api' api = Heroku::API.new(:api_key => 'API Key の値')
環境変数で指定する場合、:api_key の指定は不要です。例を以下に示します。
require 'heroku-api' api = Heroku::API.new
アプリケーションの操作
アプリケーションの作成
以下のコマンドでアプリケーションを作成できます。
heroku apps:create
これを Ruby のコードで行う例を以下に示します。
# coding: UTF-8 require 'heroku-api' api = Heroku::API.new(:api_key => 'API Key の値') info = api.post_app.body p info
実行結果の例を以下に示します。
{ "name"=>"mighty-stream-8487", "released_at"=>"2012/09/11 18:51:07 -0700", "repo_migrate_status"=>"complete", "create_status"=>"complete", "requested_stack"=>nil, "stack"=>"cedar", "slug_size"=>nil, "created_at"=>"2012/09/11 18:51:07 -0700", "buildpack_provided_description"=>nil, "git_url"=>"git@heroku.com:mighty-stream-8487.git", "owner_name"=>nil, "id"=>7508353, "database_size"=>nil, "owner_email"=>"toy@ownway.info", "repo_size"=>nil, "web_url"=>"http://mighty-stream-8487.herokuapp.com/", "domain_name"=>{ "created_at"=>nil, "updated_at"=>nil, "default"=>true, "app_id"=>7508353, "base_domain"=>"herokuapp.com", "domain"=>"mighty-stream-8487.herokuapp.com", "id"=>nil }, "dynos"=>1, "workers"=>0 }
アプリケーションの情報が Hash で返ってくるので、これらの情報を活用できます。
アプリケーション一覧の取得
以下のコマンドでアプリケーションの一覧が取得できます。
heroku apps
これを Ruby のコードで行う例を以下に示します。
# coding: UTF-8 require 'heroku-api' api = Heroku::API.new(:api_key => 'API Key の値') apps = api.get_apps.body p apps
実行結果の例を以下に示します。
[ { "name"=>"agile-lowlands-8155", "released_at"=>"2012/09/10 04:01:31 -0700", "repo_migrate_status"=>"complete", "create_status"=>"complete", "requested_stack"=>nil, "stack"=>"cedar", "slug_size"=>2916352, "created_at"=>"2012/09/10 03:49:51-0700", "buildpack_provided_description"=>"Ruby", "git_url"=>"git@heroku.com:agile-lowlands-8155.git", "owner_name"=>nil, "id"=>7462869, "database_size"=>nil, "owner_email"=>"toy@ownway.info", "repo_size"=>2781184, "web_url"=>"http://agile-lowlands-8155.herokuapp.com/", "domain_name"=>{ "created_at"=>nil, "updated_at"=>nil, "default"=>true, "app_id"=>7462869, "base_domain"=>"herokuapp.com", "domain"=>"agile-lowlands-8155.herokuapp.com", "id"=>nil }, "dynos"=>0, "workers"=>0 } ] }}
アプリケーションの情報が Hash の配列として返ってきます。以下、利用例です。
例)現在作成しているアプリケーション数の取得
puts apps.size
例)アプリケーション一覧の出力
apps.each do |app| puts app['name'] end
アプリケーションの破棄
以下のコマンドでアプリケーションを破棄できます。
heroku apps:destroy --confirm アプリケーションID
これを Ruby のコードで行う例を以下に示します。
# coding: UTF-8 require 'heroku-api' api = Heroku::API.new(:api_key => 'API Key の値') apps = api.delete_app('アプリケーションID')
以下、利用例です。
例)全ての Heroku アプリケーションを破棄(アプリケーション一覧の取得との組み合わせ)
# coding: UTF-8 require 'heroku-api' api = Heroku::API.new(:api_key => 'API Key の値') apps = api.get_apps.body apps.each do |app| api.delete_app(app['name']) end
例)Rake でのアプリケーション破棄
require 'heroku-api' desc 'Destroy heroku application.' task :destroy_app do |t| api = Heroku::API.new(:api_key => 'API Key の値') apps = api.delete_app(ENV['app']) end
以下のコマンドでアプリケーションを破棄できます。
rake destroy_app app=アプリケーションID
コンフィグの操作
コンフィグの取得
以下のコマンドでアプリケーションのコンフィグ一覧が取得できます。
heroku config --app アプリケーションID
これを Ruby のコードで行う例を以下に示します。
# coding: UTF-8 require 'heroku-api' api = Heroku::API.new(:api_key => 'API Key の値') vars = api.get_config_vars(ARGV[0]).body p vars
第1引数にアプリケーションIDを指定して実行してください。
実行結果の例を以下に示します。
{"HEROKU_POSTGRESQL_CRIMSON_URL"=>"postgres://oxhgwcjadrokmp:Io1l4VM2TlH5bQ2WytD7uJni4E@ec2-107-20-169-45.compute-1.amazonaws.com:5432/dbs777fktejs2r"}
コンフィグの情報が Hash の配列として返ってきます。以下、利用例です。
例)データベース接続情報の取得
vars = api.get_config_vars(ARGV[0]).body if vars[vars.keys[vars.keys.index { |key| key =~ /HEROKU_POSTGRESQL_.+_URL/ }]] =~ %r!postgres://(.+?):(.+?)@(.+?):([0-9]+)/(.+?)$! then puts "username: #{$1}" puts "password: #{$2}" puts "host : #{$3}" puts "port : #{$4}" puts "database: #{$5}" end
...
以下、必要に応じて執筆中。
参考
コメント
本ページの内容に関して何かコメントがある方は、以下に記入してください。
最新の10件を表示しています。 コメントページを参照