2014/03/27

Pixel Artsをruby on railsで書きなおしてみた - part2

前回は、拙作PixelArtsのコンテンツを丸ごとRubyで人気のフレームワーク、Ruby on Railsに書き換えるの一部始終を晒した訳ですが、どうせrailsを使うなら、Herokuを使って公開しようぜということで、前回から実際にHerokuで公開するに至るまでを晒してみます。




BindでDNSを管理する

私の鬼門ともいうべきBindを使ってDNSを管理する事にします。
というのも、以前のPixelArtsはさくらの500円サーバーで運用してた訳ですが、もう少し腰を据えてサーバーを使いたいなと思って、DTIのServersMan@VPSのエントリーコースに乗り換えたので、やりたい放題なわけです。

CentOSのプランを選んだので、Bindはyumで用意します。
yum install named

最近のnamedのパッケージはchroot環境やキャッシュサーバーも一緒になっているようです。
超楽ちんです。ここまではね。

次にnamed.confを調整します。
ここは「centos bind」と検索すれば最初に出てくるこちらの設定を踏襲して、独自ドメインやらの部分を読み替えて設定しました。CentOS5系向けの記事ですが、特に問題なく動作しました。
自宅サーバー向けの記事なので、ローカルネットワークの部分など色々いらないところもありますが、それは他のサーバーの設定などと見比べてちょこちょこ調整しました。

その他、細々とゾーンファイルなんかを作りましたが、ローカル向けのゾーンファイルはほぼ完コピです。グローバル向けの設定が今回の肝なので、まじめにやりました。
pixelarts.ndai.infoからhoge.herokuapp.comへ転送するには、CNAMEレコードを使って転送します。
pixelarts       IN CNAME        hoge.herokuapp.com.

みたいな感じでグローバル向けのゾーンデータベースに追記すればいいと思います。
digやnslookupがちゃんと通るようになったら、設定は問題ないと思います。


Herokuの設定をする

Herokuのアカウントは作っただけで数年放置していたのがありましたのでそれを使いました。奇跡的にパスワードを覚えていて感動。
上メニューの「Apps」から「Create a new app」のリンクを押して、アプリの名前と利用するリージョンを選択。アプリ名はオプションとなっていますが、後々どれかわからなくなりそうなのでちゃんと入れておきました。リージョンも日本からならどっちでもいいかなと。
アプリやgitのURLが表示されますが、これは後で確認します。

できあがったら、「Settings」からpixelarts.ndai.infoの登録をします。
これをせずDNSにCNAMEの登録だけしても表示されないので注意ですね。というか基本ですか。
真ん中くらいにある「Domains」の項目にドメインを打ち込んでaddすれば完了です。


Heroku Toolbeltをインストールする

Herokuはイメージとしては単なるリモートのgitリポジトリみたいな感じでデプロイする時も単にgit pushするだけで完了します。この辺の簡便さが受けている理由なのかも知れません(とりあえず動かすだけならタダだし)。
そのデプロイするのに必要なツール群がHeroku Toolbeltという訳でこれがない事には話が進まないのでインストールしてみます。

Heroku Toolbeltのページには、Mac、Windows、Bebian(Ubuntu)のパッケージはありますが、CentOSのパッケージはないので、スタンドアローン版を利用します。
ホストされているbashスクリプトをwgetしてね的なコマンドラインが表示されているのでその通りにしてみますが、静かに終了。速いなぁとおもってHerokuと打っても何も反応がない。シェル起動でつまずいているのかと思いきや、オプションをなくしてダウンロードしてみると、ダウンロードでつまずいていました。
Resolving toolbelt.heroku.com... 23.23.227.87, 50.19.233.212, 23.21.54.126
Connecting to toolbelt.heroku.com|23.23.227.87|:443... connected.
ERROR: certificate common name “www.heroku.com” doesn’t match requested host name “toolbelt.heroku.com”.
To connect to toolbelt.heroku.com insecurely, use ‘--no-check-certificate’.

SSLの証明書が違うよという問題。ちゃんとチェックしてないんでしょうかねぇ。
仕方ないので、以下のコマンドに修正して再度トライ。

wget --no-check-certificate -qO- https://toolbelt.heroku.com/install.sh | sh

無事インストールが完了しました。
最後にtoolbeltのインストール先にPATHを通して完了です。
この作業にも少し修正が必要で、
echo 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.profile
# ↓  利用環境によるが、toolbeltを利用するユーザーのプロファイルに追記するようにする
echo 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.bash_profile

以上でHeroku Toolbeltのインストールは完了です。


デプロイしてみる

Herokuにはgit経由でデプロイするので、gitがない場合はこの辺りでyumなりで揃えておきます。
ソースが既にテスト済みでデプロイ一直線の場合は、
git init
git add .
git commit -m "hogehoge"

とやって、デプロイするmasterブランチを作ります。

続いてはHeroku Toolbeltでの作業。
まず、初回の起動では、ログインして、SSHの公開鍵を作る必要があるようです。
heroku login

インタラクティブに入力できるので迷う事はありませんでした。

続いてデプロイするアプリのディレクトリまで降りて、
heroku create

とすると、しばらくするとURLが表示されます。Heroku Toolbeltのページには、この時点でHerokuのリモートリポジトリがgitに登録されるような雰囲気で書いてありましたが私の場合は登録されていませんでした。
仕方ないので、手動で登録。
git remote    #  Herokuは表示されず

# 手動で登録
git remote add heroku git@heroku.com:[yourownapp].git
git remote
heroku    # 表示された

gitのURLはHerokuのダッシュボードの「Settings」にInfoという項目があって、そこに記載されています。
この先Herokuでアプリを公開する度にgitのURLを登録していく必要があるようです。

後は、git remoteでデプロイします。
git push heroku master

処理がガーッと流れていきますが、最終的に「http://hoge.herokuapp.com/ deployed to Heroku」と出ればデプロイは問題なく完了したという事でいいと思いますので、URLを叩いて確認してみましょう。


おまけ CSSとかJSファイルが読み込めてない

Herokuとは関係ないところでつまずいたのがデプロイした後確認すると、CSSとJSがうまくロードできていないという事。よく分からなかったんですが、railsはデフォルトで本番環境ではassetsディレクトリの静的ファイルをルーティングしないという事でした。こういうのはApacheなんかのサーバーの設定でやってねという事が書いてありましたが、Herokuではそういう訳にも行きません。
どうにか本番でもassetsを利用できないか調べたところ、config/environmentsディレクトリにあるproduction.rbの設定をいじれば何とかなるとの事。
さっそくやってみました。
#  config.serve_static_assets = false
  config.serve_static_assets = true

ズバリな名前の設定ですが、これをtrueにして再度デプロイ。
git add .
git commit -m "hoge"
git push heroku master

うまく行きました。


便利だなぁ

不慣れな分、回り道もしましたが、解決するのは簡単な問題ばかりだったので思いの外早く作業は終わりました。
無料枠で運用しているのとサーバーがアメリカにあるという事でレスポンスが少しヨロシクないですが、やりたかったことは全部できたので満足しました。
サブドメインで運用できるので、小さなプロダクトをガンガン作るにはぴったりですね。


0 件のコメント:

コメントを投稿