Rails + Github + herokuでちょっと開発したときに困ったところメモ

ちょっとしたプロトタイプを作成する必要があって、いちいち鯖立てたり、ドメインとったり、というわけにもいかない状況だったのではじめてherokuを使ってみました。WEBサーバ限定ではありますが、タダでサーバのスペースが借りれるとはすごいですね・・・(まぁジオシティーズみたいなもんですが)

herokuとは

競合はAWSやGAE、Azureなどなど。最近流行りのクラウドですねー。

 

個人的にはさわり程度、AWSもGAEもherokuも触ってますが、一番初心者向きで、簡単に構築できるのはherokuかもしれませんね。(一番触ったのがherokuっていう事もありますが・・・)

もちろん無料で使えるリソースには制限があって、その範囲以上のリソースを必要とする場合は課金が必要になります。

以下参考リンク

https://www.heroku.com/pricing#0-0

http://blog.ruedap.com/entry/20110429/ruby_heroku_web_app_development_tips_1

 

今回の構成で注目するところ

  1. Rails 3.2.11
  2. Github上にリポジトリを作成し、バージョン管理。チケット管理もそこで。
  3. アプリケーションはherokuで動作させる
  4. herokuにはステージングと本番用のスペースを別途用意する
  5. twitterとfacebookのOAuth認証を利用
  6. ローカルではsqliteをherokuではpostgreSQLを利用
  7. ちなみに開発しているPCはMac

 

・RubyでPHPのvar_dump()的なことがしたかった。

これは、var_dump()と全く同じ動作をするようなモジュールをネット上でたくさん見つけましたが、個人的には

puts Object

もしくは

p to_yaml(Object)

で事足りました。もちろんvar_dump()と同じ動作したほうが詳細見れて良いときもあるかもしれませんが、オブジェクトの中身を列挙したいだけなら、不便は感じませんでした。

 

・herokuコマンドのインストール

$gem install heroku

だけ。これでheroku関連のコマンドは一式入ります。

 

・よく使ったherokuコマンド

$heroku login

herokuにログインするコマンド。これしてからじゃないと、herokuに対して何かするときはまずこれから。SSH公開鍵も登録できるので、事前に設定しておくと◎

$heroku list

自分のアカウントに紐付いているアプリケーションの一覧を表示

$heroku info

カレントディレクトリが紐付いているアプリケーションの情報を表示する。–app [app名]でカレントディレクトリのアプリケーション以外を指定もできる。

$heroku rake [rakeコマンド]

heroku上でrakeコマンドする。

$heroku config [–app [app名]]

アプリケーションに設定されている環境変数を参照する

$heroku config:add 変数名=値

heroku上に環境変数を設定する

$heroku pg:info [–app [app名]]

データベースの情報を確認する

$heroku open

アプリケーションをブラウザで表示する

$heroku logs

アプリケーションのログを取得(100件だった気がする)–tailオプションを追加すると、bashの$tail -fと同様の動作になります。

$heroku restart

アプリケーションを再起動

 

※基本的には末尾に–app [app名]を追加することで、複数あるherokuのアプリケーションを指定することができる。

 

・twitterとfacebookのconsumer_keyなどをGithubにあげたくなかったとき

データベースの接続情報とかも同様。Githubでソースコードを管理している以上、このへんの情報はパブリックにするわけにはいきません。そのときの対処法

1.開発者限定に秘匿情報を記録したymlファイルを配布

2.herokuで動いているアプリケーションには上記のymlに書かれている情報をOSの環境変数として定義

3.railsのenvironment.rbで

ymlファイルが自分の環境に存在すれば、そこから情報を読み込んでハッシュ(連想配列)に代入

ymlファイルが存在しない場合は環境変数から各種情報を読み込みハッシュに代入

を判定していずれかの処理を同じ変数に対して行う。各種情報が欲しいときは変数から呼び出し。

 

こんな感じで進めました。これによってローカル(開発メンバのPC)ではymlファイルから、heroku上では環境変数から。どちらもない環境(プロジェクトに関係のない人のPC)では動作しないようにしました。

ちなみに「ローカルでも環境変数設定してやりたいよ!」ってときは

ローカルにサーバ起動するときに

$rails server

$ 変数名1=値1 変数名2=値2 rails server

とすることで、サーバ起動のとき限定で環境変数を指定することもできます。rubyから環境変数にアクセスするにはENV[‘変数名’]でOKです。 (※変数の数はスペースを入れれば何個でもOKです。)

herokuのほうに環境変数を設定するには

$heroku config:add 変数名=値

をすればOKです。どちらもrubyからは同様にENV[‘変数名’]でアクセスすることができます。

 

・ローカルではsqlite、herokuではpostgreSQLを使いたかった

最初からちゃんと調べておけば良かったんですが、herokuって無料枠だとpostgreSQLのみ対応なんですね・・・。それを知らずにsqliteで途中まで開発進めちゃって、今更めんどくせー、ってことでローカルの環境はそのままに、heroku上ではpostgreSQLを利用するときに、設定した項目をメモ

 

まずはGemfile

RAILS_ENVがproduction(heroku上)で動作するときはpg(postgreSQLのアダプタ)を利用し、developmentとtest環境で動作するときはsqlite3を利用する、という設定です。

 

これと併せて、database.ymlも同様に設定します。

postgreSQLを利用するのはheroku上だけなので、直接ENVから読みこんじゃってます。

これでOK。まぁローカルでもproductionモードで起動したら、エラー吐いちゃいますが・・・。やむを得ない場合はこんな感じで設定は可能です、ということで。

 

・GIthubにあるリポジトリを複数のherokuアプリケーションに紐付けたかった

これ、正攻法な気がしないですが、とりあえずできて、問題も今のところないのでメモ。上から順番に実行しました。

$heroku list

herokuアプリケーションの一覧を表示

$heroku info –app [app名]

指定したherokuアプリケーションの詳細を表示

GitURLを確認する

$git remote add [任意の名前] [GitURL]

herokuコマンドに紐付いているアプリケーションとは別のremoteを追加

$git push [さっきつけた名前] master

ここでソースコードをコミット。herokuアプリケーション上でbuildが始まる

 

最初に紐付けたremoteはデフォルトでherokuという名前がつくので、それとは別にどこかのアプリケーションスペースにpushしたいときは別途用意してあげる。という設定をしている。

 

※おまけ

$heroku config:add –app [app名]

指定したアプリケーション上の環境変数を設定できる。

 

自分が困って調べるのに時間つかったところをまとめてみました。まだ開発中なので、また追加するかも。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です