RedmineをDreamhostで動かしてみる

In: Ruby / Rails| technology

6 12月 2007

先日の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:


3 Responses to RedmineをDreamhostで動かしてみる

Avatar

solis

12月 28th, 2007 at 18:02:48

久しぶりに、DreamhostでRailsのアプリケーションを更新したら動かなくなっていました。

おかげさまで、動かすことができました。
ありがとうございました。

Avatar

Reku

12月 30th, 2007 at 22:27:48

>solisさん

Dreamhostは、ちょっと前動いていたものでも、気がついたら動かなくなることがあるみたいですね。。
お役に立てて、何よりです^^

Avatar

DreamhostでPassengerを使ってみる | Katawara.*

3月 20th, 2009 at 20:34:55

[...] 以前、RailsアプリをDreamhostで動かす際には、FastCGIを使っていました。(この辺の頃の話) [...]

Comment Form

About this blog

ゆるーく、ふわーっと、興味のままに。

自分のかたわらに置いておくメモ代わり。

Photostream