少し前に VPS の Tomcat7 にデプロイしようとして失敗していました、Redmine 1.2.1 さんですが本日また再挑戦してみました。 前回の失敗は JRuby のバージョンを間違っていたという寒いオチなことが分かりましたので、今回は割とすんなりいきました。。 🙂
Rednime は Ruby 1.8 系で動作なのですね、見落としていました。
RedmineはたいていのUNIX, Linux, Mac, Windowsシステム等、Rubyが利用可能なシステムで実行できます。
Redmineの各バージョンで必要となるRailsのバージョンは以下の通りです。
というわけで、対応する JRuby は 1.5 系。 前回は 1.6 系つまり Ruby 1.9 でやってしまっていたのでした。 とほほ。
ちなみに JRuby を使うとこういう時に便利で、たとえば OS の Ruby パッケージとか気にしなくても依存関係なくポータブルにインストールすることができます。
というわけで、環境は以下の感じです。
[root@capibara redmine-1.2.1]# java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
[root@capibara bin]# /opt/apache-tomcat-7.0/bin/version.sh
Using CATALINA_BASE: /opt/apache-tomcat-7.0
Using CATALINA_HOME: /opt/apache-tomcat-7.0
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/apache-tomcat-7.0/bin/bootstrap.jar:/opt/apache-tomcat-7.0/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.19
Server built: Jul 13 2011 11:32:28
Server number: 7.0.19.0
OS Name: Linux
OS Version: 2.6.18-274.3.1.el5
Architecture: amd64
JVM Version: 1.6.0_26-b03
JVM Vendor: Sun Microsystems Inc.
[root@capibara redmine-1.2.1]# jruby -v
jruby 1.5.6 (ruby 1.8.7 patchlevel 249) (2010-12-03 9cf97c3) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [amd64-java]
適当に JRuby 1.5 を展開してパスを通して Redmine に必要な gem を追加。
# jruby -S gem install rack -v=1.1.1 --no-rdoc --no-ri
# jruby -S gem install rake -v=0.8.7 --no-rdoc --no-ri
# jruby -S gem install i18n -v=0.4.2 --no-rdoc --no-ri
# jruby -S gem install activerecord-jdbcpostgresql-adapter -v=0.9.7
# jruby -S gem install warbler
ポスグレで動作させるために、activerecord-jdbcpostgresql-adapter を入れていますが、最新バージョンであるとプロジェクト操作時に以下のエラーで落ちてしまうため、0.9.7 に落としています。
1: ActiveRecord::StatementInvalid (ActiveRecord::JDBCError: ERROR: column "issues.id" must appear in the GROUP BY clause or be used in an aggregate function: SELECT COUNT(*) AS count_all, tracker_id AS tracker_id FROM (SELECT DISTINCT "issues".id FROM "issues" LEFT OUTER JOIN "projects" ON "projects".id = "issues".project_id LEFT OUTER JOIN "issue_statuses" ON "issue_statuses".id = "issues".status_id LEFT OUTER JOIN "trackers" ON "trackers".id = "issues".tracker_id WHERE (((projects.id = 1 OR (projects.lft > 1 AND projects.rgt < 2))) AND issue_statuses.is_closed='f') AND (projects.status=1 AND projects.id IN (SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking')) GROUP BY tracker_id ) count_all_subquery):
Rails の O/R が生成している SQL が不正してしまっているように見えますね。 とりあえず、古いバージョンならうまく動くようです。
次にポスグレに DB を作成。
# su - postgres
-bash-3.2$ createuser -P redmine
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
-bash-3.2$ createdb redmine -O redmine
CREATE DATABASE
-bash-3.2$ psql -l
List of databases
Name | Owner | Encoding
-----------+----------+-----------
postgres | postgres | SQL_ASCII
redmine | redmine | SQL_ASCII
template0 | postgres | SQL_ASCII
template1 | postgres | SQL_ASCII
(4 rows)
Redmine の database.yml を作成。
[root@capibara redmine-1.2.1]# pwd
/root/install/redmine-1.2.1
[root@capibara redmine-1.2.1]# cat config/database.yml
# MySQL (default setup).
production:
adapter: jdbcpostgresql
driver: org.postgresql.Driver
database: redmine
host: localhost
username: redmine
password:
encoding: utf8
この状態で Rails の DB マイグレートを実行。
# jruby -S rake generate_session_store
# jruby -S rake db:migrate RAILS_ENV="production"
Tomcat にインストールしたいので warble。 まずは config 作成その後に war 作成。
# jruby -S warble config
# cat config/warble.rb
# 下の方に追加
config.dirs = %w(app config lib log vendor tmp lang)
config.gems << "activerecord-jdbcpostgresql-adapter"
config.gems << "i18n"
config.gem_dependencies = true
config.webxml.rails.env = 'production'
config.gems["rack"] = "1.1.1"
config.gems["rake"] = "0.8.7"
config.gems["activerecord-jdbcpostgresql-adapter"] = "0.9.7"
# jruby -S warble
あとはできた war を Tomcat7 にデプロイしてあげれば動作します。
添付ファイル格納域が WEB-INF/files になってしまいますので、シンボリックリンクで消えないところに飛ばしてあげています。(これは config で設定できたような気もします)
といわけで、
無事動きました。 🙂
さて全然関係ないですが、以上 VPS に SSH つないで操作していますが、実は今までさぼってターミナルマルチプレクサ系を入れていませんでした。 yum update 中に回線切れたら、がびーんということで、併せて本日インストール。
tmux です。 CentOS 5.7 にはパッケージないっぽかったので、ソースからインストール。 以下のライブラリに依存するようでしたので、devel を入れています。
# yum install libevent-devel ncurses-devel
あとは、普通に ./configure && make && make install でいけると思います。 😀
らいらい。と。