Archive for category サーバー関連

さくらインターネットでRubyonRailsを使用する その1 ~開発環境とのバージョンを合わせる~

さくらインターネットはご存知だろうか?

メールサーバやSSHログインして結構自由にできちゃうレンタルサーバなんかを
かなり安価な値段で使えるインフラ屋さんである。
昔はさくらのフレッツ接続って固定IPが標準でついてくる超激安ISPもやっていたのだが、
大分前から新規募集を停止してしまっている。
…何時の日か復活して欲しいものである。

話がそれた。で、このさくらインターネット、結構RubyonRailsをデプロイする先としては有名で、
色んなところで取り上げられている。もちろんここでも取り上げる。
特にローカル環境で開発したアプリケーションをさくらにアップして動かせるようにするということを目的に行う。

そのためただ環境を構築するだけでなく、ちゃんと開発環境とあわせるようにする。

さくらインターネットでのRubyonRailsのデプロイ方法をメモ。まずは開発環境とのバージョン合わせから。
実際のデプロイ作業に関しては次回。

まず、RailsやRubyが初期状態ではさくらインターネット側の更新に影響されてしまうので、
ローカルでバージョンを固定して使用できるようにする。

開発していた環境と同じRubyとRailsにする。
この場合は

Ruby=1.8.6
Rails=2.2.2

とする。
このあたりは各自の事情とか状況とか欲望とかに合わせて設定してくだちい。

ちょっと場所が場所なのでファイルの場所に注意する。
[code]
mkdir src
cd src/
[/code]

[code]
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p383.tar.gz

tar zxvf ruby-1.8.6-p383.tar.gz

cd ruby-1.8.6-p383

./configure --prefix=$HOME/local

make

make install
[/code]

[code]
vi ~/.cshrc
[/code]
setenvと書かれているところに
[code]
setenv RUBYLIB $HOME/local/lib/ruby/1.8:$HOME/local/lib/ruby
setenv GEM_HOME $HOME/local/lib/ruby/gem
[/code]
を追加する。一行目がRubyのパスで、二行目がこれから入れるRubyGemsのパスとなる。

[code]
set path = ( $HOME/local/bin $HOME/local/lib/ruby/gem/bin /sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin )

setenv EDITOR vi
setenv PAGER more
setenv BLOCKSIZE K
setenv PKG_DBDIR ~/db/pkg
setenv RUBYLIB $HOME/local/lib/ruby/site_ruby/1.8:$HOME/local/lib/ruby
setenv GEM_HOME $HOME/local/lib/ruby/gem
[/code]

で、次はGemsのインストール。
cd $HOME/src/
[code]
wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz

tar zxvf rubygems-1.3.5.tgz

cd rubygems-1.3.5

ruby setup.rb
[/code]

そして仕上げのRailsインストール。
バージョンを指定してインストールすることを忘れない。
gem install rails -v2.2.2 –include-dependencies

[code]
%ruby -v
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-freebsd7.1]

%rails --version
Rails 2.2.2
[/code]
うまくいったようだ。ではさっそくデプロイ前にテストしてみる。
[code]
rails test
/home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/../lib/rails_generator/options.rb:32:in `default_options': undefined method `write_inheritable_attribute' for Rails::Generator::Base:Class (NoMethodError)
from /home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/../lib/rails_generator/base.rb:90
from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/../lib/rails_generator.rb:34
from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/rails:13
from /home/xxxxxxx/local/lib/ruby/gem/bin/rails:19:in `load'
from /home/xxxxxxx/local/lib/ruby/gem/bin/rails:19
[/code]
…うまくいかないのが醍醐味だよねー

いつもの如くググりんぐ。
[code]
require 'rubygems'
require 'activesupport'
[/code]
を試してみよとのこと。
[code]
irb
require 'rubygems'
=> true
require 'activesupport'
LoadError: no such file to load -- iconv
[/code]
どうやら参考サイトと同様の現象のよう。安心した。

で、対処作。
先ほどRubyをインストールするときに展開したフォルダへ移動する。
[code]
cd $HOME/src/ruby-1.8.6-p383/ext/iconv/

ruby extconf.rb --prefix=$HOME --with-iconv-dir=/usr/local

make

make install

/usr/bin/install -c -m 0755 iconv.so /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/i386-freebsd7.1
[/code]
と表示されれば成功。では改めて
[code]
cd $HOME/rails/

rails test
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create config/initializers
create config/locales
create db
~省略~
create public/javascripts/dragdrop.js
create public/javascripts/controls.js
create public/javascripts/application.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log
[/code]
成功した。

そして起動確認。
普通に
[code]
ruby script/server
[/code]
でいつものようにhttp://サーバー名:3000でおなじみのウェルカム画面が表示されるはず。

デーモン化。
[code]
ruby script/server -d
[/code]
停止させたい場合は通常のサーバと同じように
[code]
ps aux
[/code]
でPIDを調査し
[code]、
kill -KILL PID
[/code]
で停止させる。-KILLオプションをつけないと停止しないので注意。

他サイトでは上記手段ではなくさくらインターネットでしかしないような/htaccessの変更や
シンボリックリンクを張るという手順を見かけるが、ありゃ一体なんなんだろう…。

とりあえず今回の最低限の環境構築は終了。

次回は実際のアプリケーションをデプロイします。

参考サイト
http://tomonori855.sakura.ne.jp/recipe/2006/05/ruby_on_rails.html
http://www.fishowl.com/web/cat21129514/index.html
http://blog.proj.jp/ituki/20090107.html
http://t100life.blog121.fc2.com/blog-entry-148.html

Redmine(Rails)をApacheと連携させたい Phusion Passenger導入

Railsの開発において面倒な点として、Mongrelやら何やらを通してサーバを起動しないといけない点である。
別にそれだけなら数あるデーモンの一つというだけで済むが、問題はRailsプロジェクトごとにポートが新しく
必要になることだ。起動するたびにポートが埋まってしまうのは大変面倒である。特に常駐でRedmineが動いている
サーバなのだ、常時ポート3000は埋まっている状態だ。ローカルでちょっと遊ぶくらいには良いかもしれないが、
実際の運用サーバ等に組み込んだときにどんどんセキュリティに穴を開けてしまうのは非常によろしくない。
できれば3000だってあけたくない。

ので、そういった面倒を回避するためにPhusion Passengerを導入する。
これを導入することにより、わざわざruby script/serverなんてしなくても、3000番ポートを
あけなくてもRailsアプリケーションが、しかもいくつでも立ち上げられるようになるのだ。
これには運用の簡略化以外にもレスポンスの向上も望めるそうなので、ちゃきちゃき入れたい。

ではまず本体のPassengerを導入。
[code]
gem install passenger
[/code]
次にApaccheとのモジュール
[code]
passenger-install-apache2-module
[/code]
対話形式でインストールが進む。
Apacheをインストールしていない場合は足りないもののリストアップとインストール方法を教えてくれるので、
それにしたがってやれば問題ない。

何も入ってなかったらこれでいいはず。
[code]
yum install gcc-c++ httpd httpd-devel apr-devel
[/code]

インストール終了後、以下のメッセージが表示される。
[code]
The Apache 2 module was successfully installed.

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

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5
PassengerRuby /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.
[/code]
Enterを押すと流れてしまうので、今のうちにコピーしておくと楽。
なお、これはたぶん環境によって生成されるものが違うので、上のをコピーしてもうまくいかないやも。

Enterを押すとさらに以下が表示される。virtualhostの設定が表示される。
[code]
Deploying a Ruby on Rails application: an example

Suppose you have a Ruby on Rails application in /somewhere. Add a virtual host
to your Apache configuration file, and set its DocumentRoot to
/somewhere/public, like this:


ServerName www.yourhost.com
DocumentRoot /somewhere/public # <-- be sure to point to 'public'!

And that's it! You may also want to check the Users Guide for security and
optimization tips and other useful information:

/usr/lib/ruby/gems/1.8/gems/passenger-2.2.5/doc/Users guide Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)

http://www.modrails.com/

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.
[/code]
これでインストールは終了なので、さっき指示された通りにファイルをいじりませう。

[code]
vim /etc/httpd/conf/httpd.conf
[/code]
ファイルの最終行に上で出力された文を追加する。
[code]
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5
PassengerRuby /usr/bin/ruby


ServerName www.yourhost.com ←DNSサーバ名や分からない、ないならIPそのものを
DocumentRoot /somewhere/public ←Redmineのルート+さらにpublicを足したもの

[/code]
また、これによりファイルの実行がMongrelではなくApacheによって行われるため、いくつかのファイルの所有権を移す必要がある。
Redmineのトップフォルダ内で
[code]
chown -R apache:apache files log tmp config/environment.rb
[/code]

そしてApacheを再起動する。
[code]
/etc/rc.d/init.d/httpd restart
[/code]

http://ServerName

にアクセスすると、以前ruby /script/serverと同じ画面が!

下記サイト参照
http://redmine.jp/tech_note/apache-passenger/

CentOSにredmine 導入 二周目

二週目、今回は奇麗なやり方。

実際には元のサーバはどうにかこうにか動かせるようになってしまって、
今更戻すわけにはいかないので、今回はAWSのCentOSイメージを使って検証。
[code]
AMI-ID:ami-10b55379 Manifest:cent53-base/ami-centos5.3-base.manifest.xml
[/code]
を使用する。

こういう検証のやり方は結構便利だ。そのうち実機サーバーのイメージを作ってそれを
EC2で動かしてテストすればさらに便利そう。

では何事もなかったように最初から。(AWSにしたのでインストールしたものとか全部やり直し)

一応、再びRubyとRailsのバージョンあわせから。
[code]
yum install -y mysql-server mysql-devel

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p383.tar.gz

tar zxvf ruby-1.8.6-p383.tar.gz

cd ruby-1.8.6-p383

./configure --prefix=/usr

make

checkinstall

rpm -ivh --nomd5 /usr/src/redhat/RPMS/i386/ruby-1.8.6-1.i386.rpm
[/code]
checkinstallってなんやねんって人は前の記事を参考。

また、既にRubyをインストールしちゃってて競合が起きてる場合で、
yumでインストールしている人はアンインストールしませう。
[code]
yum remove ruby ruby-libs ruby-irb ruby-rdoc ruby-devel
[/code]
でうまくいくはず。

*ただし、既に他のバージョンに依存するものがある場合は要注意。

次にRubyGemsをインストール
[code]
wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz

tar zxvf rubygems-1.3.5.tgz

cd rubygems-1.3.5

ruby setup.rb
[/code]
Railsのインストール。記録用にログとか残す。
Redmineが使用するRailsバージョンは2.2.2なので、指定してインストールする。
[code]
gem install rails --include-dependencies -v2.2.2
Successfully installed activerecord-2.2.2
Successfully installed actionpack-2.2.2
Successfully installed actionmailer-2.2.2
Successfully installed activeresource-2.2.2
Successfully installed rails-2.2.2
5 gems installed
Installing ri documentation for activerecord-2.2.2...
Installing ri documentation for actionpack-2.2.2...
Installing ri documentation for actionmailer-2.2.2...
Installing ri documentation for activeresource-2.2.2...
Installing ri documentation for rails-2.2.2...
Installing RDoc documentation for activerecord-2.2.2...
Installing RDoc documentation for actionpack-2.2.2...
Installing RDoc documentation for actionmailer-2.2.2...
Installing RDoc documentation for activeresource-2.2.2...
Installing RDoc documentation for rails-2.2.2...
[/code]
…残す意味ないような

Mongrelインストール。こっちもついでに。
[code]
gem install mongrel
Successfully installed gem_plugin-0.2.3
Successfully installed daemons-1.0.10
Successfully installed cgi_multipart_eof_fix-2.5.0
Successfully installed mongrel-1.1.5
4 gems installed
Installing ri documentation for gem_plugin-0.2.3...
Installing ri documentation for daemons-1.0.10...
Installing ri documentation for cgi_multipart_eof_fix-2.5.0...
Installing ri documentation for mongrel-1.1.5...
Installing RDoc documentation for gem_plugin-0.2.3...
Installing RDoc documentation for daemons-1.0.10...
Installing RDoc documentation for cgi_multipart_eof_fix-2.5.0...
Installing RDoc documentation for mongrel-1.1.5...
[/code]

[code]
mkdir /var/redmine

cd /var/redmine

svn checkout http://redmine.rubyforge.org/svn/trunk/ .
[/code]

次にMysqlのRedmine用データベースを作成する。
[code]
mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[/code]
にゅ?
ググってみるとmysqlが起動してない模様。そりゃ接続できんね。
[code]
/etc/rc.d/init.d/mysqld start
[/code]
ついでに起動時に動くよう設定。
[code]
chkconfig mysqld on
chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[/code]
んだば再度
[code]
mysql -u root
Welcome to the MySQL monitor. Commands end with ; or ¥g.
Your MySQL connection id is 2
Server version: 5.0.45 Source distribution

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.

mysql> create database redmine character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye
[/code]
ここで明示的にredmineデータベースをUTF8に設定しておかないと色々文字化けで
苦しんだりするかもしれないので注意しましょう。

で、次はRedmineの設定を弄る。

サンプル用の設定ファイルをコピーして使う。
usernameとpasswordは先ほど決めたものに変更、developmentとtestのdatabaseをredmine
にするのは、元のままだと同名のデータベースを作らなければならず、Redmineでは最初から
運用するため使わないので無駄となる。よって運用用のデータベースと同じにしてしまう。
[code]
cp config/database.yml.example config/database.yml
[/code]
以下のようにデータベースの設定を行う。
[code]
production:
adapter: mysql
database: redmine
host: localhost
username: root
password:
encoding: utf8
socket: /var/lib/mysql/mysql.sock

development:
adapter: mysql
database: redmine
host: localhost
username: root
password:
encoding: utf8

test:
adapter: mysql
database: redmine
host: localhost
username: root
password:
encoding: utf8
[/code]
まあ、実際にはProductionしか使わないのであるが、後学のために
三つとも書いておく。今後のRailsプロジェクトでコピペに使えるし。
databaseのところ書き換え忘れてエラー出しそうである。

Railsのデータベースのマイグレーション
[code]
rake db:migrate RAILS_ENV="production"

!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
no such file to load -- mysql
[/code]
マタデスカ
[code]
gem install mysql
[/code]
では再度
[code]
rake db:migrate RAILS_ENV="production"

== Setup: migrating ==========================================================
-- create_table("attachments", {:force=>true})

省略

== FixMessagesStickyNull: migrating ==========================================
== FixMessagesStickyNull: migrated (0.0005s) =================================
[/code]
あっさり成功

次はデフォルトデータの読み込み
[code]
rake load_default_data RAILS_ENV="production"
(in /var/redmine)

Select language: bg, bs, ca, cs, da, de, el, en, es, fi, fr, gl, he, hu, it, ja, ko, lt, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sv, th, tr, uk, vi, zh, zh-TW [en] ja
[/code]
さて、いよいよサーバーを起動する
[code]
ruby script/server

Status: 500 Internal Server Error Content-Type: text/html
500 Internal Server Error
[/code]
…?

コンソールの方を確認。
[code]
A secret is required to generate an integrity hash for cookie session data. Use config.action_controller.session =
{ :session_key => "_myapp_session", :secret => "some secret phrase of at least 30 characters" } in config/environment.rb
[/code]

[code]
yum -y install expect

mkpasswd -l 32
[/code]

[code]
vim config/environment.rb
[/code]

[code]
config.action_mailer.perform_deliveries = false

config.action_controller.session = { :session_key => "_myapp_session", :secret => "さっき生成した文字列" }
[/code]

[code]
ruby script/server
[/code]

成功。
いやー一週目の苦労はなんだったんだ…

後はAdmin:Adminでログインし、パスワードの変更、ユーザーの登録を行う。
ログイン後MyAccount<Languageで日本語を選択すると日本語化できる。

下記サイトを参照。
http://blog.apecell.com/2008/04/02/id/38
http://blog.livedoor.jp/leaveanest/archives/846257.html
http://uprush.net/2009/06/redmine%E3%82%92centos5%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/
http://d.hatena.ne.jp/snusmum/20090827/1251380110
http://blog.livedoor.jp/maru_tak/archives/50664746.html

CentOSにredmine 導入 一周目

ソフト開発するにあたって、レポジトリを含むWiki的なものはあると非常に楽である。
チームからみた場合互いの連携に使え、後から言った言わないの水掛輪を防げるし、
個人から見ても逐一書き込んでおけば色々見返せて便利だ。

以前の会社ではTracを使っていたが、あんまり評判は良くないようだ。
ので、Redmineを導入してみる。

で、一回目やった時には正直あまりにぐだぐだだったのであげたくなかったのだが、失敗した時の解決策の方が
奇麗な成功より参考になりそうなので、一応記述。

インストールの参考にはならないと思うので、奇麗なインストール例は次回の記事で。

[code]
yum install -y mysql-server mysql-devel
[/code]

yumでRubyをインストールしてもいいのだけど、執筆時点でCentOSが
とってくるRubyは1.8.5。このまま行くといろいろ問題が発生するので、
ここは1.8.6にしておく。
[code]
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p383.tar.gz

tar zxvf ruby-1.8.6-p383.tar.gz

cd ruby-1.8.6-p383

./configure --prefix=/usr

make

checkinstall

rpm -ivh --nomd5 /usr/src/redhat/RPMS/i386/ruby-1.8.6-1.i386.rpm
[/code]
checkinstallってなんやねんって人は前の記事を参考。

また、既にRubyをインストールしちゃってて競合が起きてる場合で、
yumでインストールしている人はアンインストールしませう。
[code]
yum remove ruby ruby-libs ruby-irb ruby-rdoc ruby-devel
[/code]
でうまくいくはず。

*ただし、既に他のバージョンに依存するものがある場合は要注意。

次にRubyGemsをインストール
[code]
wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz

tar zxvf rubygems-1.3.5.tgz

cd rubygems-1.3.5

ruby setup.rb
[/code]
Railsのインストール。
[code]
gem install rails --include-dependencies
[/code]
記録用にログとか残す。
[code]
Successfully installed activesupport-2.3.4
Successfully installed activerecord-2.3.4
Successfully installed rack-1.0.0
Successfully installed actionpack-2.3.4
Successfully installed actionmailer-2.3.4
Successfully installed activeresource-2.3.4
Successfully installed rails-2.3.4
7 gems installed
Installing ri documentation for activesupport-2.3.4...
Installing ri documentation for activerecord-2.3.4...
Installing ri documentation for rack-1.0.0...
Installing ri documentation for actionpack-2.3.4...
Installing ri documentation for actionmailer-2.3.4...
Installing ri documentation for activeresource-2.3.4...
Installing ri documentation for rails-2.3.4...
Installing RDoc documentation for activesupport-2.3.4...
Installing RDoc documentation for activerecord-2.3.4...
Installing RDoc documentation for rack-1.0.0...
Installing RDoc documentation for actionpack-2.3.4...
Installing RDoc documentation for actionmailer-2.3.4...
Installing RDoc documentation for activeresource-2.3.4...
Installing RDoc documentation for rails-2.3.4...
[/code]
…残す意味ないような

Mongrelインストール。こっちもついでに。
[code]
gem install mongrel
Successfully installed gem_plugin-0.2.3
Successfully installed daemons-1.0.10
Successfully installed cgi_multipart_eof_fix-2.5.0
Successfully installed mongrel-1.1.5
4 gems installed
Installing ri documentation for gem_plugin-0.2.3...
Installing ri documentation for daemons-1.0.10...
Installing ri documentation for cgi_multipart_eof_fix-2.5.0...
Installing ri documentation for mongrel-1.1.5...
Installing RDoc documentation for gem_plugin-0.2.3...
Installing RDoc documentation for daemons-1.0.10...
Installing RDoc documentation for cgi_multipart_eof_fix-2.5.0...
Installing RDoc documentation for mongrel-1.1.5...
[/code]

Redmine用のディレクトリを作成(この場合は /var/redmine、どこでも良い)して、
SVNをつかってRedmineをチェックアウトする

[code]
mkdir /var/redmine

cd /var/redmine

svn checkout http://redmine.rubyforge.org/svn/trunk/ .
[/code]
次にMysqlのRedmine用データベースを作成する。
[code]
mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[/code]
にゅ?
ググってみるとmysqlが起動してない模様。そりゃ接続できんね。
[code]
/etc/rc.d/init.d/mysqld start
[/code]
ついでに起動時に動くよう設定。
[code]
chkconfig mysqld on
chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[/code]
んだば再度
[code]
mysql -u root
Welcome to the MySQL monitor. Commands end with ; or ¥g.
Your MySQL connection id is 2
Server version: 5.0.45 Source distribution

Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.

mysql> create database redmine character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye
[/code]
ここで明示的にredmineデータベースをUTF8に設定しておかないと色々文字化けで
苦しんだりするかもしれないので注意しましょう。

で、次はRedmineの設定を弄る。

サンプル用の設定ファイルをコピーして使う。
usernameとpasswordは先ほど決めたものに変更、developmentとtestのdatabaseをredmine
にするのは、元のままだと同名のデータベースを作らなければならず、Redmineでは最初から
運用するため使わないので無駄となる。よって運用用のデータベースと同じにしてしまう。
[code]
cp config/database.yml.example config/database.yml
[/code]
以下のようにデータベースの設定を行う。
[code]
production:
adapter: mysql
database: redmine
host: localhost
username: root
password:
encoding: utf8
socket: /var/lib/mysql/mysql.sock

development:
adapter: mysql
database: redmine
host: localhost
username: root
password:
encoding: utf8

test:
adapter: mysql
database: redmine
host: localhost
username: root
password:
encoding: utf8
[/code]
まあ、実際にはProductionしか使わないのであるが、後学のために
三つとも書いておく。今後のRailsプロジェクトでコピペに使えるし。
databaseのところ書き換え忘れてエラー出しそうである。

Railsのデータベースのマイグレーション
[code]
rake db:migrate RAILS_ENV="production"
(in /var/redmine)
Missing the Rails 2.2.2 gem. Please `gem install -v=2.2.2 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed
[/code]
これだから発展途上の言語は嫌いデース。

解説しておくと、Redmineは開発者が作った環境に依存しているため、特にRailsのバージョンなんかは露骨にその動きに影響されるわけで、
こちらのバージョンが違うとこういう問題が起きるのですね。対処法としては、
1)Railsのバージョンを合わせる。
2)エラーメッセージにあるようにRAILS_GEM_VERSIONを自分のRailsバージョンに合わせる。

とりあえず2)でいってみましょう。
今後2.2.2固定でやっていくとは限らないし

わぁ、さっきログとっておいたのが役に立ったね♪
[code]
vim /config/enviroment.rb
[/code]
[code]
# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.2.2' unless defined? RAILS_GEM_VERSION

RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION
[/code]
以上のように変更。変更バージョンは適切に変更してください。
[code]
rails -v
[/code]
とかで調べて。
[code]
rake db:migrate RAILS_ENV="production"
(in /var/redmine)
rake aborted!
A key is required to write a cookie containing the session data. Use config.action_controller.session = { :key => "_myapp_session", :secret => "some secret phrase" } in config/environment.rb

(See full trace by running task with --trace)
[/code]
わぁまた知らんエラーが

注意書きに則り、
[code]
vim config/environment.rb
[/code]
下記を末尾に追加する
[code]
config.action_controller.session = { :key => "_myapp_session", :secret => "適当な英数字" }
[/code]
再再度挑戦
[code]
rake db:migrate RAILS_ENV="production"
(in /var/redmine)
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
no such file to load -- mysql
[/code]
はいだらーーー!

まぁ、解決策がすぐ分かるエラーを出してくれる分にはいいですね、ええ。

*実はここでruby1.8.5だと1.8.6以降じゃないとインストールできないとか抜かされるので、ちゃんと1.8.6にしないと駄目なのだ。
[code]
gem install mysql
[/code]
成功。
では再々々々挑戦
[code]
rake db:migrate RAILS_ENV="production"
[/code]
[code]
(in /var/redmine)
== Setup: migrating ==========================================================
-- create_table("attachments", {:force=>true})
-> 0.1660s
-- create_table("auth_sources", {:force=>true})
[/code]
省略

成功した。
*実はここでmysql-develをインストールしてなくて色々うまくいかなったのだが、
そこは割愛。

デフォルトデータの読み込み
言語設定ではjaを選択
[code]
rake load_default_data RAILS_ENV="production"
(in /var/redmine)

Select language: bg, bs, ca, cs, da, de, el, en, es, fi, fr, gl, he, hu, it, ja, ko, lt, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sv, th, tr, uk, vi, zh, zh-TW [en] ja
[/code]
さて、いけたようなので、いよいよ起動してみる。
[code]
ruby script/server
=> Booting WEBrick
=> Rails 2.3.4 application starting on http://0.0.0.0:3000
/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:443:in `load_missing_constant': uninitialized constant ApplicationController (NameError)
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:80:in `const_missing'
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:92:in `const_missing'
from /var/redmine/app/controllers/account_controller.rb:18
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:158:in `require'
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:265:in `require_or_load_without_engine_additions'
from /var/redmine/vendor/plugins/engines/lib/engines/rails_extensions/dependencies.rb:124:in `require_or_load'
... 18 levels...
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/commands/server.rb:84
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from script/server:3
[/code]
ググる。どうも本格的に2.3で運用するのはあんまり向いてないらしい。Railsをプロジェクトごとに素直に切り替えた方がよかったのかなぁと後悔。
[code]
cd app/controllers
[/code]
どうやらコントローラの一つの名前が変更されている模様。
[code]
mv application.rb application_controller.rb

ruby script/server
[/code]
が、これでもエラーが出てしまいうまくゆかず。
その後色々やってもうまくいきませんでした。
もう少しがんばればできたかも知れないが、問題の根幹はRails2.2.2用のRedmineを無理やり2.3.4で動かそうとしたことなのである。…あの時、Railsをあわせるを選んでおけば…

GAME OVER

以下二週目に続く、まさかここまでそのままやった人はいないと思うが、やってしまった記録としてどう対処するかも記録する。
まぁ、ぶっちゃけ下記の手順を行うことによりRedmineが正常に動くようになる。

まず、先ほど変えてしまったコントローラの名前を元に戻し、
[code]
mv application_controller.rb application.rb
[/code]

Redmineの環境設定でRailsのバージョンを2.2.2に。
[code]
vim /config/enviroment.rb
# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION

RAILS_GEM_VERSION = '2.2.2' unless defined? RAILS_GEM_VERSION
[/code]
最初から2.2.2を選んだ場合の手順書についてはこちら

下記サイトを参照。
http://blog.apecell.com/2008/04/02/id/38
http://blog.livedoor.jp/leaveanest/archives/846257.html
http://uprush.net/2009/06/redmine%E3%82%92centos5%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/
http://d.hatena.ne.jp/snusmum/20090827/1251380110
http://blog.livedoor.jp/maru_tak/archives/50664746.html

PoderosaをつかってAmazonEC2に接続

なんか一連の手順を確実に忘れそうなので即効覚書。

なんていうかぽでろっさというソフト名自体すぐ忘れそうだ。
絶対来週あたりにはぺどろっさとか言っているだろう。

WS000096
AmazonWebservice,特にWindowsでEC2へSSHでログインしたい時、
Amazonのサイトでコピー可能な
ssh -i XXXXXX.pem root@XXXXXXXXXXXXXXXXXX.amazonaws.com
はWindowsで使おうとするとうまくいかない。(少なくてもうちで使っているソフトでは)
Macならすんなり付属のターミナルでいけそうだが。

で、うちでメインで使っているPoderosaだと、Amazonからダウンロー出した秘密鍵をそのまま読ませて
接続しようとすると失敗する。使うためには一度鍵を変換する必要がある。

1.PuTTYを用意する。
もうこの時点でPuTTY使えよという話であるが、あいてーえんじにあというものは自分の気に入った
道具に偏執するものなので、言ってはならぬ。

下記URLより入手した。別に本目的で使うわけではないので、インストーラではなくZipで問題ない。
http://yebisuya.dip.jp/Software/PuTTY/

2.PuTTY付属のputtygen.exeで鍵を変換。
puttygen.exe起動後、「基地の秘密鍵の読み込み」の読み込みボタンを押下し、
Amazonからダウンロードした鍵ファイルxxxxx.pem(インスタンス生成時に選択したもの)
を選択する。

WS000095

その後タブの変換の中の「ssh.com形式へエクスポート」を選択し、保存する。

3.変換された鍵を使ってEC2にPoderosaでログイン
Poderosaを起動し、ファイル>新規Telnet/SSH接続を選択し、
認証方法を秘密鍵に設定、パスフレーズは空で、鍵ファイルに先ほど変換したファイルを設定。
接続先にはAmazonのサイトで指定されたXXXXXXXXXXXXXXXXXX.amazonaws.com を指定して接続。

WS000098

後はやったらめったらいらつくレスポンスの悪さを堪能するばかりである。

参考サイト
http://it.kndb.jp/entry/show/id/2574

ソースしかなくてもパッケージ管理したい〜Checkinstallを使う〜

ソースファイルからインストールしたものをアンインストールしようとすると、結構面倒なことになることが多い。
というのも、yumやrpmみたいにパッケージとして管理されてないので、コマンド一つでアンインストールが
できないからだ。

必然手動で関連ファイルを消したりパスを変更したりせねばならず。大変面倒だし、うっかり消してはいけない
ものまで消してしまったりするので色々面倒なことになりかねない。

そこでCheckInstallというソフトを使う。
これを使えば本来はSpecがなければ作成できないRPM等のパッケージが作れるという優れもの。

さっそく本体をインストール。
[code]
wget http://asic-linux.com.mx/~izto/checkinstall/files/rpm/checkinstall-1.6.1-1.i386.rpm
rpm -ivh checkinstall-1.6.1-1.i386.rpm
[/code]

ここでは別の作業でインストールしたlibrsyncを例にする。
作成したいソースのフォルダ内に入ったところから、通常通りに
./configureとmakeを行い、make installとするところを代わりに
checkinstallと入力する。という手順をとる。

例としてlibsyncを使用。
[code]
checkinstall

checkinstall 1.6.1, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.

The checkinstallrc file was not found at:
/usr/local/lib/checkinstall/checkinstallrc

Assuming default values.

The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: y

パッケージのドキュメンテーションを準備..OK
[/code]

パッケージの種類を選択、コメントの作成、そのほか細かい設定。
パッケージの種類以外はすべてEnterを押してしまってもあまり問題はなさそう。
[code]
Please choose the packaging method you want to use.
Slackwareなら[S], RPMなら[R], Debianなら[D]を入力r

このパッケージの説明を書いてください
End your description with an empty line or EOF.
>> RPM package for libsync
>>
**************************************
**** RPM package creation selected ***
**************************************

This package will be built according to these values:

1 - Summary: [ RPM package for libsync ]
2 - Name: [ librsync ]
3 - Version: [ 0.9.7 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ i386 ]
8 - Source location: [ librsync-0.9.7 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ librsync ]

変更するものの番号を入力してください。Enterで続行します:
[/code]

で、あとは通常のRPMと同様にインストール可能。ただし、このバージョンのcheckinstall
は割とアレゲなバグがあって、インストールしようとするとMD5チェックエラーおこしてインストールが失敗してしまうので、オプションでMD5チェックをしないようにする必要がある。

[code]
rpm -ivh --nomd5 /usr/src/redhat/RPMS/i386/librsync-0.9.7-1.i386.rpm
[/code]

残念ながら確実にパッケージ化できるわけではないので注意が必要。