さくらのVPS を使いはじめる 7 - Ruby EE、Passenger、Redmine
さくらのVPS への作業メモ 7。今回は Redmine のインストールをおこなう。
ただし前回で入れた Ruby 1.9.1 だとデータベースに初期設定をおこなうところでエラーになるという致命的な問題が起きるので、1.9.1 を消して Ruby Enterprise Edition を入れ直す。実にひどい問題だと思うのだが、直る見込みはなさそうなので受け容れることにする。
- 2012/5/9 おしらせ
- 続編として、さくらのVPS(v3) 2GB プランへの作業メモ「さくらのVPS を改めて使いはじめる 9 – Ruby、Redmine、Subversion」を書いた
ソースからコンパイルした Ruby のアンインストール
Ruby を標準で make install
すると /usr/local/bin
にインストールされるので中身を表示してみる。
$cd /usr/local/bin
$ ls -l -a
合計 8544
drwxr-xr-x 2 root root 4096 9月 20 13:08 .
drwxr-xr-x 12 root root 4096 8月 10 15:43 ..
-rwxr-xr-x 1 root root 4399 9月 11 00:21 erb
-rwxr-xr-x 1 root root 548 9月 11 00:21 gem
-rwxr-xr-x 1 root root 320 9月 11 00:21 irb
-rwxr-xr-x 1 root root 397 9月 19 20:50 passenger-config
-rwxr-xr-x 1 root root 413 9月 19 20:50 passenger-install-apache2-module
-rwxr-xr-x 1 root root 411 9月 19 20:50 passenger-install-nginx-module
-rwxr-xr-x 1 root root 407 9月 19 20:50 passenger-make-enterprisey
-rwxr-xr-x 1 root root 403 9月 19 20:50 passenger-memory-stats
-rwxr-xr-x 1 root root 403 9月 19 20:50 passenger-spawn-server
-rwxr-xr-x 1 root root 397 9月 19 20:50 passenger-status
-rwxr-xr-x 1 root root 402 9月 19 20:50 passenger-stress-test
-rwxr-xr-x 1 root root 372 9月 20 13:08 rackup
-rwxr-xr-x 1 root root 1250 9月 11 00:21 rake
-rwxr-xr-x 1 root root 699 9月 11 00:21 rdoc
-rwxr-xr-x 1 root root 75 9月 11 00:21 ri
-rwxr-xr-x 1 root root 8651648 9月 11 00:12 ruby
-rwxr-xr-x 1 root root 249 9月 11 00:21 testrb
きちんとアンインストールしたい場合は以下の方法がよいのだが、
今のところ /usr/local/bin
には Ruby 系モジュールしか入っていないようなので中身をすべて消す。
$ sudo rm -rf *
あとソースも消しておく。
$ cd /usr/local/src
$ sudo rm -rf ruby-1.9.2-p0/
さよなら Ruby。
Ruby Enterprise Edition をインストール
Ruby 1.8.7 ベースの最適化バージョンである Ruby Enterprise Edition をインストール。これを利用すると Passenger から Ruby on Rails アプリを実行したときのメモリ使用量が節約されるなどのメリットがあるらしい。どうせ 1.8.7 を入れるなら本家ではなくこちらのほうがよいと思う。
まず公式サイトからインストーラをダウンロード & 展開する。現時点の最新版は 1.8.7-2010.02 のようだ。
$ cd /usr/local/src
$ sudo wget http://rubyforge.org/frs/download.php/71096/ruby-enterprise-1.8.7-2010.02.tar.gz
$ sudo tar xzvf ruby-enterprise-1.8.7-2010.02.tar.gz
$ sudo rm -rf ruby-enterprise-1.8.7-2010.02.tar.gz
展開したらインストールする。ありがたいことに Enterprise Edition はインストーラが付属しているのでそれを実行すればよい。Passenger 制作元だけありインストーラは対話形式で親切だ。
$ sudo ./ruby-enterprise-1.8.7-2010.02/installer --no-dev-docs
... 中略 ...
Press Enter to continue, or Ctrl-C to abort.
Checking for required software...
* C compiler... found at /usr/bin/gcc
* C++ compiler... found at /usr/bin/g++
* The 'make' tool... found at /usr/bin/make
* The 'patch' tool... found at /usr/bin/patch
* Zlib development headers... found
* OpenSSL development headers... found
* GNU Readline development headers... not found
Some required software is not installed.
But don't worry, this installer will tell you how to install them.
Press Enter to continue, or Ctrl-C to abort.
Passenger の時と同様に足りないものを警告してくれる。Zlib と OpenSSL は前回で入れたのだが新たに GNU Readline development headers が必要とのこと。インストーラを Ctrl + C で抜けて以下のようにインストール。
$ sudo yum -y install readline-devel
不足を補ったので再試行。
$ sudo ./ruby-enterprise-1.8.7-2010.02/installer --no-dev-docs
... 中略 ...
Target directory
Where would you like to install Ruby Enterprise Edition to?
(All Ruby Enterprise Edition files will be put inside that directory.)
: /usr/local
インストール場所を問い合わせられるので標準の Ruby と同様に /usr/local
としておく。パスを入力したら Enter で決定する。インストールが再開されてしばらく待たされる。その際に以下のような警告が表示された。
Warning: some libraries could not be installed
The following gems could not be installed, probably because of an Internet
connection error:
* sqlite3-ruby
* pg
These gems are not required, i.e. Ruby Enterprise Edition will work fine without them. But most people use Ruby Enterprise Edition in combination with Phusion Passenger and Ruby on Rails, which do require one or more of the aforementioned gems, so you may want to install them later.
To install the aforementioned gems, please use the following commands:
* /usr/local/bin/ruby /usr/local/bin/gem install sqlite3-ruby
* /usr/local/bin/ruby /usr/local/bin/gem install pg
Press ENTER to show the next screen.
Ruby 用 SQLite アダプタなどがネットワークの問題でインストールできませんでした、とのこと。今回は MySQL を利用するので関係なし。後から自前で追加することもできるから必要になったときに入れればよい。というわけで Enter を押して続行。
... 前略 ...
If you have any questions, feel free to visit our website:
http://www.rubyenterpriseedition.com
Enjoy Ruby Enterprise Edition, a product of Phusion (www.phusion.nl) :-)
無事インストール完了。
- 余談
- Ruby Enterprise Edition や Passenger はインストールの最後に :-)という顔文字を表示する
- これをそのまま WordPress の記事中に貼り付けるとスマイリーアイコンを表示するための img タグに変換される
- そのため SyntaxHighlighter のショートコード内に書くと「顔文字が img タグに変換 → SyntaxHighlighter がソース部分をプレーンテキストに変換 → ソース中の顔文字が img タグとして表示される」という厄介なことになるので、掲載しているソースの顔文字は括弧を全角にしている。
Passenger と Apache の設定
Passenger から Apache モジュールをインストールする。前回で実行済みなので不足モジュールはなくスムーズに進行した。
$ sudo passenger-install-apache2-module
... 中略 ...
LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.15
PassengerRuby /usr/local/bin/ruby
...中略 ...
<VirtualHost *:80>
ServerName www.yourhost.com
DocumentRoot /somewhere/public # <-- be sure to point to 'public'!
<Directory /somewhere/public>
AllowOverride all # <-- relax Apache security settings
Options -MultiViews # <-- MultiViews must be turned off
</Directory>
</VirtualHost>
...中略 ...
Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.
前回と同様に環境依存の設定項目が表示されるのでメモしておく。LoadModule ~
部分を Apache の httpd.conf 末尾に書き込むために vi で開く。
$ sudo vi /etc/httpd/conf/httpd.conf
そして以下のように編集する。設定内容が変化しているかもしれないので、前に設定したものが残っていたら消してから記述すること。
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.15
PassengerRuby /usr/local/bin/ruby
編集を終えたら保存して、設定の確認と Apache の再起動をおこなう。
- 追記 2010/10/04
apachectl restart
よりもservice httpd restart
の方が Apache の状態を表示する分、望ましいと思うので訂正
$ sudo apachectl configtest
Syntax OK
$ sudo service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
Redmine 用データベースとユーザー作成
Redmine 用のデータベースとユーザーを作成する。以下のようにコマンドを実行。IDENTIFIED BY
の後にはパスワードとなる文字列を指定する。
$ mysql -u root -p
mysql> CREATE DATABASE redmine DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON redmine.*
-> TO redmine@localhost IDENTIFIED BY 'XXXXXXXXXXXXXXXX';
Query OK, 0 rows affected (0.00 sec)
注意点として 5 行目のユーザー作成の指定方法がある。@localhost
のようにホスト名をつけないと %
というワイルド カードとして解釈されてしまう。この状態だとパスワードを正しく入力しても MySQL に接続できず Redmine の初期テーブル生成にも失敗するので必ずホスト名を指定すること。
今回は MySQL と Redmine を同じサーバー上で動かすのでホスト名は localhost となる。
Redmine のインストール
いよいよ Redmine をインストールする。バージョンは 1.0.1 のリリース版を使用。イメージは RubyForge の Redmine プロジェクトに公開されているので最新版の tar.gz を示す URL をメモしておく。そして以下のようにインストール。
$ cd $HOME
$ wget http://rubyforge.org/frs/download.php/72201/redmine-1.0.1.tar.gz
$ tar zxvf redmine-1.0.1.tar.gz
$ sudo mv redmine-1.0.1 /var/lib/redmine
$ rm -rf redmine-1.0.1.tar.gz
MySQL を Ruby から操作することになるので Ruby 用 MySQL アダプタが入っていることを確認。
$ gem list
... 中略 ...
mysql (2.8.1)
mysql
という表記があれば OK。なければ以下のようにインストール。mysql-devel
、アダプタの順に入れる。
$ sudo yum -y install mysql-devel
$ sudo gem install mysql -- --with-mysql-lib=/usr/lib/mysql
Building native extensions. This could take a while...
Successfully installed mysql-2.8.1
1 gem installed
Installing ri documentation for mysql-2.8.1...
Installing RDoc documentation for mysql-2.8.1...
次は Redmine のデータベース接続に関する設定をおこなう。これは database.yml というファイルに指定する。初期状態では database.yml.example というサンプル ファイルが置かれているので、これをコピーして編集することにした。
$ cd /var/lib/redmine/config/
$ cp database.yml.example database.yml
$ vi database.yml
このファイルを以下のように編集。
MySQL (default setup).
production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: XXXXXXXXXXXXXXXX
encoding: utf8
ユーザー名とパスワードを「Redmine 用データベースとユーザー作成」で設定した内容に書き換えて保存。
最後にセッション管理用の秘密鍵を生成する。これがないと Redmine の起動でエラーが発生する。
$ rake generate_session_store
(in /var/lib/redmine)
Redmine 用データベースの初期化 {#vps07_redmine_init_db}
今回インストールした Redmine のデータベースを初期化するためには rack モジュールが 1.0.1 でなくてはならない。ここまでの手順で導入されているものは 1.2.1 なのでアンインストールしてから入れ直す。
$ sudo gem uninstall rack
... 中略 ...
Successfully uninstalled rack-1.2.1
$ sudo gem install rack -v 1.0.1
Successfully installed rack-1.0.1
1 gem installed
Installing ri documentation for rack-1.0.1...
Installing RDoc documentation for rack-1.0.1...
そして以下のようにテーブルを作成。
$ cd /var/lib/redmine/config/
$ rake db:migrate RAILS_ENV=production
(in /var/lib/redmine)
テーブルに初期設定を反映する。途中で Redmine の言語を問い合わせられるので、ja と入力して Enter を押す。
$ rake redmine:load_default_data RAILS_ENV=production
(in /var/lib/redmine)
Select language: bg, bs, ca, cs, da, de, el, en, en-GB, es, eu, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ja
====================================
Default configuration data loaded.
これで Redmine が日本語環境として設定された。
Redmine を動かす
ここまでくればあと一息。Redmine の起動設定をおこない実際に動かしてみる。
さくらのVPS では Redmine 以外の Web アプリも動かす可能性があるので redmine というサブ ディレクトリを設けて、そこで動かすようにしたい。そのためには Apache のドキュメント ルートに Redmine の RAILS_ROOT/public
に対するシンボリック リンクを作成する必要がある。これは以下のコマンドで作成。
$ sudo ln -s /var/lib/redmine/public /var/www/html/redmine
Apache の httpd.conf にも設定しておく。
$ sudo vi /etc/httpd/conf/httpd.conf
ファイルの末尾に以下の内容を追記。
RailsBaseURI /redmine
編集を終えたら保存して、設定のチェック & Apache 再起動。
$ sudo apachectl configtest
Syntax OK
$ sudo service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
準備 OK。ではさっそく Redmine へアクセスしてみよう。今回はドメインのサブ ディレクトリ redmine をルートとした。そして私の借りているサーバーはドメインを取っていないので http://XXX.XXX.XXX.XXX/redmine/
というような URL となる。これをブラウザのアドレス バーに入力して表示すると...
ばっちり Redmine が動いてる。ああ長かった。軽く祝杯をあげよう。
最後に admin のパスワードなどを変えておこうと思ったのだが My account などにアクセスすると 500 エラーになる。なぜ?とりあえずパスワードを変更せずに公開するのは危険なので Apache ごと停止しておく。
$ sudo service httpd stop
httpd を停止中: [ OK ]
なんとも困ったものだ。最後にこんな落とし穴があるとは。
今回はここまで。次は Redmine の 500エラー解決と、Subversion か Git を入れたい。...と思ったがこのまま終わってしまうのはもったいない。もう少し粘って調べてみようじゃないか。
エラーを解決して admin のパスワードを変える
Redmine 公式 wiki を見ると Ruby や Rails などのバージョンが細かく指定されている。調べてみると Rails が 2.3.5 でなければならない。しかし Ruby Enterprise Edition で入るのは 3.0.0 のようだ。まずはこれを 2.3.5 に戻してみる。
$ sudo gem uninstall rails
... 中略 ...
Successfully uninstalled rails-3.0.0
$ sudo gem install rails -v=2.3.5
... 中略 ...
Installing RDoc documentation for rails-2.3.5...
そして Apache を起動し...
$ sudo service httpd restart
httpd を起動中: [ OK ]
改めて Redmine にログインして My account をクリック。ダメだ。やはりエラーになる。とはいえ Redmine が公式にサポートするバージョンの Rails にしたということで、他の潜在的な問題が起きなくなるはず。
次はログを解析。Redmine のインストール先が /var/lib/redmine
ならログは /var/lib/redmine/log/production.log
にある。以下のコマンドを実行してリアルタイムにログ監視をおこなう。実行するとログファイルの末尾が変化する度にコンソールへ内容が追記表示されてゆく。抜ける場合は Ctrl + C。
$ tail -f /var/lib/redmine/log/production.log
監視状態にした TeraTerm をブラウザの横に並べる。そして Redmine へログインしてから My account をクリック。すると以下のようなエラーが出力された。
ActionView::TemplateError (missing interpolation argument in "%m/%{count}/%Y" ({:object=>Mon, 20 Sep 2010} given)) on line #17 of app/views/users/show.rhtml:
14: <li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
15: <% end %>
16: <% end %>
17: <li><%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %></li>
18: <% unless @user.last_login_on.nil? %>
19: <li><%=l(:field_last_login_on)%>: <%= format_date(@user.last_login_on) %></li>
20: <% end %>
日時の書式がおかしいようだ。はっきりいって謎すぎる。しかし Redmine の管理画面に書式を設定するところがあったのでダメもとで設定を変更。これは Redmine 左上のメニューから「Administration」→「Settings」→「Display」と選択してゆくと表示されるページの Date format と Time format となる。
これで直ったら笑えるなあ、と思いながら再び My account をクリックすると...**エラーが出ない!ばっちり直ってる!!**なんてことだ。本当に直ってしまった。なんなのだこれは。というわけで admin の設定をおこなう。言語、メールアドレス、パスワードを変更。
めでたしめでたし。
...今回はここまで。次は Subversion か Git を入れたい。
Comments from WordPress
- qabo 2010-09-21T17:42:29Z
はじめまして。
こちらのサイトを参考にVPSの設定を行っているモノです。
他のサイトにくらべ、見やすく、丁寧な説明なのでほんとに助かります~。
次回の更新(GitよりSubversionがいいなぁ・・・)も楽しみにしています!
それでは。
- akabeko 2010-09-21T22:21:21Z
Git で考えていたのですが、複数人で開発しないなら Subversion のほうが分かりやすいですね。 標準で yum からインストールできる手軽さもありますし....というわけで Subversion を検討します。
- qabo 2010-09-22T00:44:53Z
早々ご返答いただけて光栄です。
ありがとうございます、ぜひご検討ください。
応援してますー
- akabeko 2010-10-04T14:41:32Z
貴重な情報ありがとうございます。1.0.2 だとエラーが起きないのですね。
Redmine 自体のチケットを見るに開発はかなり活発なようなので、品質向上のペースも早いのでしょう。あとはバージョンアップが WordPress 並に楽だと嬉しいのですが、これも近いうちに実現してしまうのかもしれませんね。
- kakicg 2010-10-04T14:02:28Z
redmineの最新バージョン1.0.2でインストールしたせいか上のようなエラーは起きませんでした。railsも3.0.0で今のところ問題なし。
- akabeko 2010-12-05T13:58:32Z
1.0.1 → 1.0.4 にアップグレードしてみたところ、i18n のエラーは発生しませんでした。 Redmine 本家のロードマップを見ると、バージョン更新の度に i18n 関連のチケット対応があるので、 それが効いているのかもしれません。
- aki 2010-11-04T19:37:43Z
同じ問題ではまりました。
私のケースでは1.0.3で、Internal ErrorがSettingでも起きていたので難儀しました。
こちらに情報がありました。
http://www.redmine.org/boards/2/topics/18879?r=18888
sudo gem uninstall i18n
でapache再起動すれば動きました。
- megane 2010-11-05T03:44:22Z
akabeko様
はじめまして!
とてもわかりやすい説明で迷うことなくインストール出来ました。ありがとうございます!
私もaki様と同じ問題ではまっていましたが、i18nをアンインストールしたら解決しました。
aki様もありがとうございました!