2011-08-29
■[fluxflex][Sinatra] Fluxflex で sinatra をデプロイするのが大変だった話
情報どこかにあるはずなんですがねえ。
以下はすべて状況からの推測であり、原因などについてはまちがっている恐れがあります。
@yamashitam 先生との「Ruby x Java 第二回」で fluxflex に挑んだ。
問題
sowawa/sinatra_for_fluxflex - GitHub をデプロイし、自分でカスタムしてアップデートすると
[error]: Premature end of script headers: dispatch.fcgi
とでる。
意味は、 dispatch.fcgi(sinatra をよびだしているファイル)の処理が正常に終了していない、ということ。
具体的にどこでエラーがでているかはわからない。
再現方法1
- fluxflex でプロジェクトをつくる
- さきほどのリポジトリ をローカルに clone、適宜修正(しなくてもよし)
- そのプロジェクトの git URL を remote に登録して、さきほど clone したものを push する(git URL は Setup > Git から)
- デプロイがおわったらアクセスする > 500 エラー
再現方法2
- fluxflex でプロジェクトをつくる
- さきほどのリポジトリ をプロジェクトにロード(Github Import)
- このとき Run initialize scripts for setting up the project. にチェック
- この時点では正常動作する
- Setup > Git から取得した Git URL から、 clone し、ローカルで改変をくわえる
- push する
- デプロイがおわったらアクセスする > 500 エラー
再現方法3
- さきほどのリポジトリ をローカルに clone
- 自分のプロジェクトを Github 上にたてて、そこに push
- fluxflex でプロジェクトをつくる
- 自分のリポジトリからプロジェクトにロード(Github Import)
- このとき Run initialize scripts for setting up the project. にチェック
- 正常動作
- Post-Receive Hook URL の登録(自動で github にきたものを deploy)
- 改変して push
- デプロイがおわったらアクセスする > 500 エラー
基本
Access Logs
Statistics > Acccess Logs
アクセスできないとか、(とくに)一度はアクセスできたけど、くりかえしやっているとおかしいとかいうときに確認する。
ちょろっとエラーメッセージがでる(詳細はわからない)。
Initialization Logs
Deploy したときの処理のログがでる。
ここで実行されるコマンド・スクリプトは .flx ファイルで指定できる(後述)
原因
さきほどのリポジトリの .flx をみると、
[setup] chmod 705 public_html/dispatch.fcgi [replace] public_html/dispatch.fcgi USER_NAME PROJECT_NAME [deploy] bash fluxflex_deploy.sh
- [setup]
- ファイルをクリーンにして構築しなおすときに実行するスクリプト・コマンド
- [replace]
- ファイルを生成するときの置換パターン
- [deploy]
- Git / Github からファイルが更新される度に実行されるスクリプト・コマンド
詳細: デプロイ・イニシャライザ - fluxflex ドキュメント
ここで、 dispatch.fcgi の実行権限付加が setup 時にのみおこなわれているが、 git 上にあるファイルは 644 なので、(setup をとおさない) deploy をおこなうと、この権限で上書きされて、実行できないことが原因。
解決策
1.パーミッション設定のコマンドを deploy にもいれる
たぶんもっともまともな解決策。@yamashitam さんと試したときにはうまくいかなかったり。自分でやったらうまくいってる。
.flx の deploy のところに追記
: : [deploy] chmod 705 public_html/dispatch.fcgi bash fluxflex_deploy.sh
(https://github.com/tomykaira/sinatra_for_fluxflex/blob/master/.flx)
2.毎回 Setup を手動実行
Web Interface を毎度叩かなくてはいけないが、簡単。
@yamashitam さんはこれでやってた。
3.git リポジトリ上で実行権限をあたえる
git の場合 755 になってしまうので(705 は記録してくれない)、セキュリティ的に問題があるかもしれない(ないかもしれない)。
わたしはこれでやってた。 Windows ではできない。
$ chmod +a public_html/dispatch.fcgi $ git ci
追記(2011.8.30):Pull Request を送信しました。
https://github.com/tomykaira/sinatra_for_fluxflex
それにともない、仮リポジトリをつぶし、このURLにおきかえました。
(おまけ) FluxFlex と heroku の比較
- (F>H)ファイルの生成ができる
- (H>F)デプロイが速い(実際には、 heroku は git push 時に同期的におこなっているため時間的にはおなじあるいは遅いけど、Web Interfaceをリロードして待つ時間がないので早くかんじる)
- (H>F)参考資料がおおい
(本当のおまけ) KPT
勉強会だから KPT しちゃうよ!
Keep
- リーズナブル
- 夜空・夜風きもちいい
- 電源をとって、集中してできた。
Problem
- リア充爆発しろ
- おれ Java 書け
Try
- Java かく
- goos
- Griffon (Groovy だけど)
- 5 http://t.co/FMEDSuo
- 4 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http://d.hatena.ne.jp/ToMmY/20110801/1312129216&rct=j&q=rails devise ??????&ei=drhbTu6aJcjymAW-5I3ADA&usg=AFQjCNHyBPAODygMMrD6BTmJtzvyQTKK_A&sig2=CY8SHeBTIxilo8
- 3 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/ToMmY/20070311/1173587419
- 3 http://t.co/NJAahq1
- 3 http://t.co/VZuF4Fq
- 3 http://tomykaira.github.com/
- 3 http://userscripts.org/scripts/show/23780
- 2 http://d.hatena.ne.jp/keyword/Ruby
- 2 http://d.hatena.ne.jp/keyword/Sinatra
- 2 http://d.hatena.ne.jp/nokuno/20110625/1309015145
