Hatena::ブログ(Diary)

ToMmY Makes Love with Codes RSSフィード Twitter

2011-08-29

[][] Fluxflex で sinatra をデプロイするのが大変だった話

情報どこかにあるはずなんですがねえ。

以下はすべて状況からの推測であり、原因などについてはまちがっている恐れがあります。

@yamashitam 先生との「Ruby x Java 第二回」で fluxflex に挑んだ。

問題

sowawa/sinatra_for_fluxflex - GitHub をデプロイし、自分でカスタムしてアップデートすると

[error]: Premature end of script headers: dispatch.fcgi

とでる。

意味は、 dispatch.fcgi(sinatra をよびだしているファイル)の処理が正常に終了していない、ということ。

具体的にどこでエラーがでているかはわからない。

再現方法1
  1. fluxflex でプロジェクトをつくる
  2. さきほどのリポジトリ をローカルに clone、適宜修正(しなくてもよし)
  3. そのプロジェクトの git URL を remote に登録して、さきほど clone したものを push する(git URL は Setup > Git から)
  4. デプロイがおわったらアクセスする > 500 エラー
再現方法2
  1. fluxflex でプロジェクトをつくる
  2. さきほどのリポジトリ をプロジェクトにロード(Github Import)
    • このとき Run initialize scripts for setting up the project. にチェック
  3. この時点では正常動作する
  4. Setup > Git から取得した Git URL から、 clone し、ローカルで改変をくわえる
  5. push する
  6. デプロイがおわったらアクセスする > 500 エラー
再現方法3
  1. さきほどのリポジトリ をローカルに clone
  2. 自分のプロジェクトを Github 上にたてて、そこに push
  3. fluxflex でプロジェクトをつくる
  4. 自分のリポジトリからプロジェクトにロード(Github Import)
    • このとき Run initialize scripts for setting up the project. にチェック
  5. 正常動作
  6. Post-Receive Hook URL の登録(自動で github にきたものを deploy)
  7. 改変して push
  8. デプロイがおわったらアクセスする > 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 だけど)

yusukeyusuke 2012/01/15 20:45 こんにちは。

gitImportでsinatra_for_fluxflexを導入させていただいたのですが、
アクセスすると画面にforbiddenが表示され、
AccessLogsにはPremature end of script headers: dispatch.fcgiが表示されてしまいます。
なにか他にされた設定はありますか?

ToMmYToMmY 2012/01/16 12:10 たしかに forbidden になります。
いま修正できる状況にないので、お力になれず申し訳ありません。

しかし、 forbidden になっている時は、ログに 403 が表示されると思うのですが、そうはなっていませんか?

yusukeyusuke 2012/01/16 13:06 お忙しいところお返事いただきありがとうございます。

fluxflexのWEBから確認できるAccessLogsにはPremature end of script headers: dispatch.fcgiが8回表示されておりますが、
それ以降は特にエラーが出ていません。

ちなみにInitializationLogsは以下のようになっています。
01/16/2012 03:48:47
[INFO] use repository initializer.
[INFO] start initialize.
[INFO] start initialize (SETUP MODE)
[DONE] replaced. public_html/dispatch.fcgi : USER_NAME -> 'xxxxxx'
[EXECUTE] chmod 705 public_html/dispatch.fcgi
[EXECUTE] bash fluxflex_deploy.sh
>> /usr/local/rvm/rubies/ruby-1.9.2-p180/bin/gem:4: warning: Insecure world writable dir /mnt in PATH, mode 040777
>> Successfully installed rack-1.4.0
>> Successfully installed rack-protection-1.2.0
>> Successfully installed tilt-1.3.3
>> Successfully installed sinatra-1.3.2
>> 4 gems installed
>> /usr/local/rvm/rubies/ruby-1.9.2-p180/bin/gem:4: warning: Insecure world writable dir /mnt in PATH, mode 040777
>> Building native extensions. This could take a while...
>> Successfully installed fcgi-0.8.8
>> 1 gem installed
[INFO] finished.

特に問題なくDeployできているかと思います。
dispatch.fcgiの権限もls -lで確認したところ705になっています。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/ToMmY/20110829/1314632142