先日のTokyo24もそうですが、いろいろやろうぜ的な場として、友人が借りているDreamhostのサーバーで、何かとやっております。
Tokyo24も公開されたことだし、今度はちょっと管理ツールがほしいかな、ということで、Ruby on Railsで作られたアプリ、Redmineを入れてみることにしました。
最初はこのブログの置いてあるさくらインターネットでやろうかと考えていたのですが、FastCGIが使えなくて動作がゆっくり、という噂を聞いたので今回は見送り。
Redmineって?
……と、いう方は、以下をごらんくださいませ。
ものすごくざっくり要約すれば、Excelやら何やらで障害・変更管理していたものをウェブベースでもやりましょう、というもの。
使いこなせれば、Subversionとの連携やwikiやタスク管理もできますよ、ということだそうです。
早速、インストール!
てことで、何はともあれインストール。
Redmineのインストールの手順(英語)に従っていきます。
1)適当にインストールしたいディレクトリなりサブドメインなりをつくり、以下のコマンドを打つ。
-
svn checkout svn://rubyforge.org/var/svn/redmine/trunk
これでまずは、RedmineのソースをSubversionからゲッチュー完了です。
できなかった人は、リンク先の英語を読んでください。
2)DB作成する。
練習なので、スキーマ名は「redmine」とでもしておきましょうか。
好きに作ります。
3)落としてきたソースのconfig配下にdatabase.yml.exampleなるファイルがあるので、それをコピーして、database.ymlを作る。
linux上でcpすればいいだけ。個人的には、なんとなくオプションで"-p"はつけたけどね。
4)database.ymlに以下のとおり追加する。
-
production:
-
adapter: mysql
-
database: redmine
-
host: mysql.domain.com
-
username: user_for_redmine
-
password: password_for_redmine
-
encoding: utf8
2で作ったものを使います。設定は脳内で読み替えてくださいませ。
5)rake db:migrateを実行する。
Rakefileの置いてあるパス(これを俗にRAILS_ROOTとか言ったりするらしい。たぶん。)で以下のコマンドを実行。
-
rake db:migrate RAILS_ENV="production"
終わったら、今度はこれ。
-
rake redmine:load_default_data RAILS_ENV="production"
なんぞこれwww
あっという間に、さっき指定したスキーマに、基本的に必要なテーブル、ユーザー、項目値、その辺が全部入ります。便利だなー。
Redmine的にはこれであとはサーバー起動させてみてよ、簡単でしょ? 的な空気で終わりです。
でも、そっからなのよ……っ!
Dreamhost側でもいろいろやる。
今度はDreamhost側の設定に移ります。
どうもクセがあって、大体いろいろやってるうちに動き出します。
手順には一部おまじないが含まれているかもしれませんので、あらかじめご了承を。
主な参考手順はここの記事です。
1)Dreamhostのコントロールパネルでの設定をいじる。
ドメイン登録して、【FastCGI Support?】にチェック。
【Specify your web directory】で、"/home/username/exampledomain.com/public/"になるように入力。
後ろにpublicをつけるのと、ダブルクォートで囲んだ内容に「なるように」というのがミソ。
これをやると、FastCGIで動かす+exampledomain.comにアクセスすると即ページに飛ぶ、という仕様になります。
2)dispatch.fcgiを作る。
Redmineのソースに戻って、public配下にあるdispatch.fcgi.exampleをコピーして、dispatch.fcgiを作成。
ついでに、dispatch.cgiもdispatch.rbも同様に作ってみます。
さらに、chmodで権限も調整。
-
chmod 755 dispatch.fcgi
-
chmod 755 dispatch.cgi
-
chmod 755 dispatch.rb
3)dispatch.fcgiにtouchする。
-
touch dispatch.fcgi
英語版のフォーラムには書いてあったけど、これをやると、Dreamhost側のFastCGIがアプリの内容が変わったとみなしてくれて、アプリを再読み込みしてくれるらしい。
killall -USR1 dispatch.fcgi コマンドで、dispatch.fcgiを再読み込みする手のが一般的っぽいけど、何かkillが怖かったので、僕はこっちのが好み。
これで、基本的には立ち上がるはず、なんだけど。。
いろいろおかしい。
スタイルシート、javascriptが読み込まれない。
調べてみると、どうやらこれはdevelopmentモードで動いているらしい。
しかも、なぜかdispatch.cgiを見ているらしい。
てことで、再度、挑戦。
スタイルシートや何かはログを見ると、こんな感じになっていました。
-
ActionController::RoutingError (no route found to match "/javascripts/prototype.js" with {:method=>:get}):
-
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/routing.rb:1292:in `recognize_path'
-
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/routing.rb:1282:in `recognize'
-
/usr/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/dispatcher.rb:40:in `dispatch'
-
dispatch.cgi:11
現在、問題なく動いているTokyo24と見比べつついると。
.htaccessがかなり違う。てことで、こう直す。
-
<ifmodule mod_fastcgi.c>
-
AddHandler fastcgi-script .fcgi
-
</ifmodule>
-
<ifmodule mod_fcgid.c>
-
AddHandler fcgid-script .fcgi
-
</ifmodule>
-
<ifmodule mod_cgi.c>
-
AddHandler cgi-script .cgi
-
</ifmodule>
-
Options +FollowSymLinks +ExecCGI
を
-
AddHandler fastcgi-script .fcgi
-
#AddHandler fcgid-script .fcgi
-
AddHandler cgi-script .cgi
-
Options +FollowSymLinks +ExecCGI
に、
-
<ifmodule mod_fastcgi.c>
-
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-
</ifmodule>
-
<ifmodule mod_fcgid.c>
-
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-
</ifmodule>
-
<ifmodule mod_cgi.c>
-
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
-
</ifmodule>
を
-
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
に、変更。
すると、今度は完全にApplication Errorが起きて、今度は完全に動かない。
Apacheのerror.logを追いかけると、こんなエラー。
-
[Wed Dec 05 22:25:10 2007] [error] [client 59.171.49.2] FastCGI: comm with (dynamic) server "/home/hogehoge/exampledomain.com/trunk/public/dispatch.fcgi" aborted: (first read) idle timeout (60 sec), referer: http://exampledomain.com/account/register
-
[Wed Dec 05 22:25:10 2007] [error] [client 59.171.49.2] FastCGI: incomplete headers (0 bytes) received from server "/home/hogehoge/exampledomain.com/trunk/public/dispatch.fcgi", referer: http://exampledomain.com/account/register
……わからず。
いろいろ調べてみた限り、スタイルシートやjavascriptの権限がおかしいとか、いろいろあったんだけれど、最終的な答えはdispatch.fcgiの1行目。
-
#!/usr/bin/ruby
を、
-
#!/usr/bin/ruby1.8
に変えたら動いた。
(この辺は、Dreamhost上でrailsコマンドを打って、サンプルアプリを作って調べたらわかった)
あとは、日本語対応として、environment.rbに以下をしかるべきところに追加。
-
$KCODE = "UTF8"
-
ENV['RAILS_ENV'] ||= 'production'
最後にtouch dispatch.fcgiで、無事productionモードで起動っ。
あー、長かった。
おかげで、今回は参考文献もかなり多し。
最初のインストールは10分くらいで終わったのに、動かすまでに半日くらいって。。
Via:
- Redmine - Overview - Redmine
- Redmine - RedmineInstall - Redmine
- さくらインターネットのレンタルサーバーで redMine - redMine Users (japanese) | Google グループ
- dream hostでredmine - WhoAreYou?
- DreamhostでのRails動かし方 - Railsなど技術系覚え書き
- Talk:Ruby on Rails - DreamHost(Routing Problemsでgrep)
- railsのapache+fastcgiではまる
- On the Rails Rails Apache + FastCGI 環境構築のはまりパターン
- rails で apache + fastcgi (マルッと!)

久しぶりに、DreamhostでRailsのアプリケーションを更新したら動かなくなっていました。
おかげさまで、動かすことができました。
ありがとうございました。
>solisさん
Dreamhostは、ちょっと前動いていたものでも、気がついたら動かなくなることがあるみたいですね。。
お役に立てて、何よりです^^