nginxとpassengerでredmine(rails)が稼働する環境を作成します。
環境
- arch: amd64(xen DomU)
- OS(userland): NetBSD 5.1
- kernel: NetBSD 5.99.39
- nginx: 0.8.53
- passenger: 2.2.15
- rails: 2.3.5
gemで必要そうなものをインストールします。
# gem18 install rails -v 2.3.5
# gem18 install passenger -v 2.2.15
# gem18 install i18n -v 0.3.7
2010年11月26日時点でi18nは0.4.2が最新ですが後述の問題により0.3.7を利用します。
以上の準備ができたところで、nginxをpassenger対応で再構築する必要があります。
通常は、passenger-install-nginx-module スクリプトを利用するのですが、今回はpkgsrcのnginxを利用していないので手動で行うことにします。
# cd /usr/pkg/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/nginx
# rake nginx
[code]
[code]$ tar zxvf somewhere/nginx-0.8.53.tar.gz
$ cd nginx-0.8.53
$ ./configure --prefix=/usr/local/nginx --with-ld-opt="-R/usr/pkg/lib -lm" --add-module=/usr/pkg/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/nginx
$ make
$ su
# make install
nginxのredmine用の設定ファイルを作成します。
/usr/local/nginx/conf/redmine.conf:
server {
listen 80;
server_name redmine.example.com;
access_log logs/redmine.example.com/access.log;
error_log logs/redmine.example.com/error.log info;
root /somewhere/redmine-1.0.3/public;
passenger_enabled on;
rails_env production;
}
/usr/local/nginx/conf/nginx.conf:
.
.
http {
.
.
include redmine.conf;
}
redmine側はapache用に設定したときのままで修正は特に必要ありません。
nginxをリスタートするとredmineが使えるようになります。
# /etc/rc.d/nginx restart
当初はi18n ruby packageとしてi18n 0.4.2を使ってみたのですが、browserでアクセスすると以下のようなメッセージがでました。
Internal error
An error occurred on the page you were trying to access.
If you continue to experience problems please contact your redMine administrator for assistance.
somewhere/redmine-1.0.3/log/production.logをみてみると以下のようなエラーがでていました。
ActionView::TemplateError (wrong number of arguments (2 for 0)) on line #23 of app/views/welcome/index.rhtml:
20: <% for project in @projects %>
21: <% @project = project %>
22: <li>
23: <%= link_to_project project %> (<%= format_time(project.created_on) %>)
24: <%= textilizable project.short_description, :project => project %>
25: </li>
26: <% end %>
/usr/pkg/lib/ruby/gems/1.8/gems/i18n-0.4.2/lib/i18n/backend/base.rb:158:in `warn_syntax_deprecation!'
/usr/pkg/lib/ruby/gems/1.8/gems/i18n-0.4.2/lib/i18n/backend/base.rb:158:in `interpolate_without_deprecated_syntax'
/usr/pkg/lib/ruby/gems/1.8/gems/i18n-0.4.2/lib/i18n/backend/base.rb:153:in `gsub'
/usr/pkg/lib/ruby/gems/1.8/gems/i18n-0.4.2/lib/i18n/backend/base.rb:153:in `interpolate_without_deprecated_syntax'
/usr/pkg/lib/ruby/gems/1.8/gems/i18n-0.4.2/lib/i18n/backend/base.rb:46:in `translate'
/usr/pkg/lib/ruby/gems/1.8/gems/i18n-0.4.2/lib/i18n.rb:160:in `t'
/usr/pkg/lib/ruby/gems/1.8/gems/i18n-0.4.2/lib/i18n/backend/base.rb:60:in `localize'
/usr/pkg/lib/ruby/gems/1.8/gems/i18n-0.4.2/lib/i18n.rb:240:in `l'
lib/redmine/i18n.rb:48:in `format_time'
app/views/welcome/index.rhtml:23:in `_run_rhtml_app47views47welcome47index46rhtml'
app/views/welcome/index.rhtml:20:in `each'
app/views/welcome/index.rhtml:20:in `_run_rhtml_app47views47welcome47index46rhtml'
passenger (2.2.15) lib/phusion_passenger/rack/request_handler.rb:92:in `process_request'
passenger (2.2.15) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop'
passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:441:in `start_request_handle
i18nを0.3.7にすることでこの問題は解決できました。