Snow LeopardにRedmineを導入まとめ

前回前々回では非常に手こずりながらSnow LeopardRedmineを導入しました。

と、トライアンドエラーの大量の文章を見ても気が滅入るだけなので、今回はSnow LeopardRedmineを導入するまでの手順をまとめてみようと思います。

XCodeのインストール

必須…なのかな?僕はiPhoneアプリの開発が目的なので、ここからXCodeの最新版(iPhone SDK)をダウンロード。別にiPhoneアプリ開発しない方は、ここからXCodeダウンロード。インストールは特に問題なくできると思います。

MacPortsのインストール

これも必須かどうか微妙だけど、とりあえず。ここのとおり、The MacPorts Projectからダウンロード、インストールする。次に、MacPorts自身のアップデート。

$ sudo port -d selfupdate
$ sudo port -d sync

Web共有(Apache)の有効化

システム環境設定から、「共有」を選択し、「Web共有」にチェックを入れることで、Apacheが起動する。

RubyGemsのアップデート

Snow Leopardはデフォルトの状態だと、gemのバージョンは1.3.1なので、アップデートする。

$ sudo gem update --system

Ruby On Railsのアップデート

こちらも最新の状態にしておく。

$ sudo gem update rails

MySQLのインストール

http://dev.mysql.com/downloads/mysql/5.1.html こちらから、「Mac OS X 10.5 (x86_64)」のパッケージ(拡張子は.dmg)をダウンロード、インストールする。MacPortsのではダメらしい。

  • mysql-5.1.39-osx10.5-x86_64.pkg
  • MySQLStartupItem.pkg
  • MySQL.prefPane

の順にインストールする。インストール後は、システム環境設定からMySQL自動起動するよう設定できる。

my.cnfの記述

/usr/local/mysql//support-files/my-small.cnf を/etc/my.cnfとしてコピーし、/etc/my.cnfを編集する。「mysqld」ディレクティブに、以下の設定を追記。

$ sudo cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf
$ sudo vi /etc/my.cnf
…
[mysqld]## USER-SETTINGS
default-character-set = utf8
default-storage-engine=innodb
skip-character-set-client-handshake
##

MySQLデータベースのインストール

$ sudo /usr/local/mysql/scripts/mysql_install_db --user=mysql

MySQLの起動、パスワードの設定

システム環境設定から「MySQL」をクリックしてMySQLの設定画面を表示する。「Start MySQL Server」ボタンをクリックするとMySQLが起動する。MySQLが起動した状態で、パスワードを設定する。
2行目のコマンドは失敗するので実行しなくてもよい。*1

$ sudo /usr/local/mysql/bin/mysqladmin -u root password '(MySQLパスワード)'
$ sudo /usr/local/mysql/bin/mysqladmin -u root -h macmini.local password '(MySQLパスワード)'
./bin/mysqladmin: connect to server at 'macmini.local' failed
error: 'Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server'

Redmine用のデータベースユーザーの作成

mysqlコマンドにPATHを通しておく。

$ sudo mkdir /usr/local/bin
$ sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

データベースredmineを作成して、さらにユーザーredmineを作成、redmineユーザーはデータベースredmineに対して全ての権限を持つようにする。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
 …
mysql> grant all privileges on redmine.* to redmine identified by '(Redmine用パスワード)';

RubyGemsMySQL用データベースドライバをインストール

おまじないみたいなもの。強制的に64bitでバイナリを作るらしい。「No definition for next_result」なんかのメッセージが出るが、特に問題は無かった。

$ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Redmineのインストール

http://redmine.jp/ から最新版をダウンロードし、インストールする。.tar.gzファイルを展開してできるディレクトリを「redmine」とし、仮に、redmineをホームディレクトリ/Library/redmine に配置しておく。*2

$ mv redmine /Users/<ユーザー名>/Library/

database.ymlの編集

database.yml.exampleをコピーして作る。ここでは、「production」を使うものとして設定する。

$ cp redmine/config/database.yml.example redmine/config/database.yml
$ vi redmine/config/database.yml
…
production:
  adapter: mysql
  database: redmine
  host: localhost
  username: root
  password: (MySQLでredmine用に設定したパスワード)
  encoding: utf8

…以下略

email.ymlの編集

パス。

Redmineデータベースの初期化

Redmineデータベースの初期化を行い、デフォルトのトラッカー、ロール、ワークフローなどの初期データを投入する。2行目の「sudo rake redmine:load_default_data RAILS_ENV=production」の方は、「Select language」と聞かれるので「ja」と入力する。

$ sudo rake db:migrate RAILS_ENV=production
$ sudo rake redmine:load_default_data RAILS_ENV=production

Passengerのインストール

ここからは、Apache+PassengerでRedmineを動作させるための設定になる。

$ sudo gem install -r passenger

次に、Apacheモジュールのビルドを行う。対話的に進んでいく。途中の質問では、Apacheモジュールをインストールするため「1」を選択する。
また、httpd.confへ追記すべき内容が表示されるので、表示内容は保存するなり残しておくこと。

$ sudo passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v2.2.5.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.
1  ←1を入力し、エンターキーを入力。

(省略)

--------------------------------------------
The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-2.2.5/ext/apache2/mod_passenger.so
   PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-2.2.5
   PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.

httpd.confの編集

Passengerのインストール時に表示された内容を、httpd.confに追記する。追記位置は、LoadModuleが大量に書かれているあたりで良い。
また、今回はサブディレクトリで使用することを想定しているので、RailsAutoDetectとRailsBaseURIも記述する。
あと「RailsEnv production」を追記してもよい。*3

$ sudo vi /etc/apache2/httpd.conf
…
## USER SETTINGS
LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-2.2.5/ext/apache2/mod_passenger.so
PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-2.2.5
PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

RailsAutoDetect off
RailsBaseURI /redmine
##
…以下略

シンボリックリンクの作成

「http://<ホスト名>/redmine/」という具合に、Redmineをサブディレクトリで動かしたいので、シンボリックリンクを作成する。

$ sudo ln -s /Users/<ユーザー名>/Library/redmine/public /Library/WebServer/Documents/redmine

できあがり

これで、3000番ポートを指定しなくても、通常のhttp(80番ポート)でRedmineが使えるはず。

この本は割と参考になりました。。

追記:ハマったところ

一応、ハマったところも書いておく。上記の内容をきちんと行っても、ブラウザでアクセスすると500 Internal Server Errorになってしまう場合がある。

LeopardSnow Leopardの場合の話だけど、ホスト名に「macmini」と名づけた場合、そのネットワーク内で他のコンピュータからアクセスする場合は、「macmini.local」とブラウザに打ち込まなければならない。*4 *5 *6
あと、「http://<IPアドレス>/redmine/」でもRedmineにアクセスできる。

*1:MySQLのインストールログに、「issue the following commands」とか言われるけど

*2:redmineを置いておきたい、任意の場所でOK

*3:デフォルトでは、RailsEnvはproductionになっているため

*4:僕は、ずっとブラウザで「http://macmini/redmine/」にアクセスしようとしていて、「なんでできないんだろ?」と数時間ハマった。。

*5:hostsファイルを編集してmacminiIPアドレスを「macmini」でアクセスできるように設定した場合、「http://macmini/redmine/」にアクセスしてもRedmineにはアクセスできない

*6:でもまぁ、apachehttpd.confにNameVirtualHostを指定してたりすると、こういうことは起こらない。。