君の瞳はまるでルビー - Ruby 関連まとめサイト

Heroku アプリケーションの管理

最終更新: 2015-03-31 (火) 21:53:16 (845d)

Heroku の管理

目的

Heroku にインストールした後のアプリケーションの管理についてまとめます。

アプリケーションソースコードの再取得から再デプロイ

作成済みのアプリケーション一覧の確認

以下のコマンドを実行してください。

heroku apps

実行結果は以下のような出力になります。

=== My Apps
mighty-lowlands-3837
pacific-eyrie-3425
salty-thicket-1737

My Apps の下に表示されているIDがアプリケーションの名前です。この例では、アプリケーションが3つ作成済みなのでIDが3つ表示されています。個々のアプリケーションの操作にこのIDを使います

このIDはアプリケーションを作成した際にも表示されます。例えば以下の通りです。

Creating mighty-lowlands-3837... done, stack is cedar
http://mighty-lowlands-3837.herokuapp.com/ | git@heroku.com:mighty-lowlands-3837.git

Creating mighty-lowlands-3837 とアプリケーションのIDが表示されています。

インストール済みアプリケーションのソースコード取得

Heroku にインストールしたアプリケーションは Heroku 上の Git で管理されており git clone コマンドによって取得できます。

その前に取得対象となるアプリケーションの Git リポジトリの URL を確認する必要があります。

以下のコマンドを実行してください*1

heroku info --app アプリケーションID

実行結果は以下のような出力になります。

=== fathomless-hamlet-1029
Git URL:       git@heroku.com:mighty-lowlands-3837.git
Owner Email:   abc@def.ghi.jkf
Repo Size:     852k
Slug Size:     504k
Stack:         cedar
Web URL:       http://mighty-lowlands-3837.herokuapp.com/

Git URL の値を使ってインストール済みアプリケーションを取得します。

以下のコマンドを実行してください。

git clone git@heroku.com:mighty-lowlands-3837.git

mighty-lowlands-3837 というディレクトリができて、その中にアプリケーションのソースコードが入っているはずです。カレントディレクトリに展開したい場合は、以下のコマンドを実行してください。

git clone git@heroku.com:mighty-lowlands-3837.git .

修正済みアプリケーションの再デプロイ

ソースコードを修正したら、以下のコマンドを実行してください。

git add .
git commit -m "修正した内容に関する説明"
git push origin master

修正済みのアプリケーションがデプロイされます。

ここで注意点ですが、最初にアプリケーションを作成してデプロイしたときは以下のコマンドを実行しました。

git push heroku master

しかし、ここでは heroku ではなく origin になっています。origin とは git clone で取ってきた取得元のリポジトリです。

.git/config ファイルを見ると以下の記述が見つかると思います

[remote "origin"]
	fetch = +refs/heads/*:refs/remotes/origin/*
	url = git@heroku.com:mighty-lowlands-3837.git

origin はこの定義によります。最初にアプリケーションをデプロイしたときと同様に git push heroku master でデプロイをしたい場合は、以下のコマンドを実行して heroku というリモートリポジトリを設定に追加します。

git remote add heroku git@heroku.com:mighty-lowlands-3837.git

以降、git push heroku master もしくは git push origin master のいずれでも同じくデプロイできるようになります。

ブランチ/タグや別リポジトリからの強制再デプロイ

Heroku は完全な Git リポジトリとしてアプリケーションのソースコードを管理してくれますが、アプリケーションとして認識されるのは master ブランチにあるソースコードだけです。

以下のような場所

  • master 以外のブランチやタグ
  • 全く異なる Git リポジトリ

にあるソースコードを既存の Heroku アプリケーションとしてデプロイするには git push に --force オプションを使う必要があります。

前提として heroku という名前で Heroku の Git リポジトリがリモートリポジトリとして登録済みであるとします。

例えば beta_1 というブランチのソースコードをアプリケーションとしてデプロイするには以下のコマンドを実行してください。

git push heroku beta_1:master --force

これはローカルリポジトリのブランチ beta_1 の内容を heroku リモートリポジトリの master に強制的に入れるためのものです。

別のリポジトリの内容を入れる場合も同じく --force オプションを使います。

※ 強制再デプロイの必要性と注意点

強制再デプロイと似た方法に「アプリケーションを破棄/再作成してデプロイ」という方法がありますが全くの別物であるという点に注意してください。

データベースなどの各種アドオンによって作られる各種リソースはアプリケーション毎に作成されるものです。アプリケーションを削除すると、これらのリソースも同時に破棄され、永遠に失われてしまいます。

従って、各種リソースを持っている場合、安易にアプリケーションを破棄してはいけません。

一方で運用での必要性により、

  • バージョンダウン(≒master 以外のブランチやタグのソースコードに入れ替え)
  • 別アプリへの切り替え(≒全く異なる Git リポジトリのソースコードに入れ替え)

等が発生することがあり、強制再デプロイが必要になってきます。

ブランチやタグから強制再デプロイを実施する場合、リポジトリの運用に気をつけるポイントが1つあります。

  • ソースコードの流れを開発用の独自リポジトリから Heroku のリポジトリへと一方通行にすること。

git push の --force オプションを使った場合、Heroku のリポジトリの内容は元々の master の情報を欠いた不完全なものになります。 不完全なHeroku のリポジトリを git clone で取り出してしまうと混乱が生じます。

その混乱を避けるためソースコードの流れは一方通行にした方が良いでしょう。

アプリケーションの各種状況確認

各アプリケーションの動作状況の確認

以下のコマンドを実行してください。

heroku ps --app アプリケーションID

実行結果は以下のような出力になります。

=== cron: `bundle exec clockwork clock.rb`
cron.1: up for 18s

これは cron という「bundle exec clockwork clock.rb」コマンドを実行しているプロセスが 1 あって、動き出してから 18 秒経っているということを表しています*2

プロセスが終了している場合(正常終了、エラー終了に関わらず)は、up ではなく crashed と表示されます。

各アプリケーションのログの確認

...

アプリケーションのプロセス管理

プロセスのスケーリング

...

プロセスの停止

...

アプリケーションの設定

ロケールの設定

heroku config:add TZ=Asia/Tokyo --app アプリケーションID
heroku config:add LANG=ja_JP.UTF-8 --app アプリケーションID

最後に…アプリケーションの破棄

以下のコマンドを実行してください。

heroku destroy --app アプリケーションID

簡単にアプリケーションの削除が行われないよう以下のような警告が出ます

 !    WARNING: Potentially Destructive Action
 !    This command will destroy アプリケーションID (including all add-ons).
 !    To proceed, type "アプリケーションID" or re-run this command with --confirm アプリケーションID

>

警告に従い確認のためアプリケーションIDをキーボード入力するとアプリケーションが破棄されます。

もしくは以下のコマンドを実行すると、確認作業が不要になります。

heroku destroy --confirm アプリケーションID

データベースなどの各種アドオンによって作られる各種リソースはアプリケーション毎に作成されるものです。アプリケーションを削除すると、これらのリソースも同時に破棄され、永遠に失われてしまいます。

アプリケーションを破棄する場合は、注意してくださいということです。

コメント

本ページの内容に関して何かコメントがある方は、以下に記入してください。

最新の10件を表示しています。 コメントページを参照

  • アプリケーション破棄のコマンドが変更されたみたいですね。 heroku apps:destroy -a example --confirm example -- mogya 2014-04-06 (日) 14:44:33
  • コメントありがとうございまいます。最新の Heroku Toolbelt を入れてみたのですが変りなかったです。環境が違うんでしょうか?こちら Windows を使用しています。destroy コマンドは apps:destroy の短縮系になります。 -- トゥイー 2014-05-29 (木) 10:10:47
お名前: