Amazon Linux AMIでRuby 1.9.2 + Ruby on Rails3.0.0 (checkinstall, sqlite3, passenger etc..) 環境をセットアップ

2010年09月20日(月)
By Naoyuki Yamada

前回の記事に引き続き、 Amazon EC2で奮闘したメモです。

PHPはレンタルサーバー借りれば最初から動いていることが多くて、CakePHPとかだとファイルアップロードすれば動く、みたいな状態になっていることが多いですよね。Ruby on Railsは始めてだったので苦労しました・・・。

ほとんどソーシャルアプリ関係ないですが、環境作ったあと、これからアプリ作っていきます。

Amazon Linux AMIをあえて使う必要もないかもしれません。今のところメリットが見えませんが、さくっと環境整えるにはちょうど良いし、CentOSとほとんど変わりなく使えます。

この記事では、sshで入れる状態になったあと、最小構成の状態のLinuxにRuby on Railsバージョン3を入れてチュートリアルが動作する状態まで紹介します。

ほとんど下記リンクとやっている内容は同じです。Amazon EC2でAmazon Linux AMIでやってる、というくらいの違いです。

いやー大変参考になりました。いくつも見比べるとよりトラブルシューティングに役立ちますね。

さくらの VPS に登録してみた(4) checkinstall, vim, zsh – まゆの日記

VMware + CentOS4 + Ruby環境インストール – プログラマー某の外部記憶

blog: CentOSにrailsインストール

CentOS 5.2 で railsをインストールするまで – akimatter

前回はMicro Instanceを使いましたが、今回はRubyのコンパイルとかでCPUリソースを喰うので、Micro Instanceでは時間かかって大変です。セットアップが一通り完了するまではLarge Instanceを使います(Smallは32bitしかないため)EBSで起動すれば、終わったあとスナップショットをとってMicroで起動し直せばLargeを使う時間は30分くらいなので100円くらいしかかかりません。

よく見たら、Launch InstanceでQuick StartのところにAmazon Linux AMIがリストされてるんですね。ここから選べば簡単です。

20100920ruby-1.png

Largeインスタンスでデフォルト設定で起動します。途中は前回の記事参照。

Yamada-Naoyuki-MacBook-Pro:~ yamadanaoyuki$ ssh ec2-user@ec2-xxxxxxxxxxxx.ap-southeast-1.compute.amazonaws.com -i .ssh/asia_satully1.pem
The authenticity of host ‘ec2-xxxxxxxxxxxx.ap-southeast-1.compute.amazonaws.com (xxxxxxxxxx)’ can’t be established.
RSA key fingerprint is xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘ec2-xxxxxxxxxxx.ap-southeast-1.compute.amazonaws.com,xxxxxxxxxxxxxx’ (RSA) to the list of known hosts.
   __| __|_ ) Amazon Linux AMI
   _| ( / Beta
   ___|\___|___|
See /etc/image-release-notes for latest release notes. :-)
[ec2-user@ip-xxxxxxxxxxxx ~]$ sudo su

以降rootで作業してしまいます。必要なものを先にyumでインストール。

yum install git gettext-devel gcc rpm-build zlib-devel 

まずcheckinstallを入れます。これは各種アプリケーションをソースからインストールする場合にそれをRPM化してあとからパッケージとして管理することができるというものです。必須ではありませんが、アンインストールしたりする場合などに便利なので入れておきます。
RPM管理するということで、あとでRPMのソースディレクトリが必要になるので作成しておきます。

cd ~
mkdir -p rpm/{SPECS,BUILD,SOURCES,SRPMS,RPMS}
vi .rpmmacros

で”.rpmmacros”の中身を下記にして保存します。

%_topdir /root/rpm
%_specdir %{_topdir}/SPECS
%_builddir %{_topdir}/BUILD
%_sourcedir %{_topdir}/SOURCES
%_srcrpmdir %{_topdir}/SRPMS
%_rpmdir %{_topdir}/RPMS

終わったらソースをダウンロードするフォルダに移動。

checkinstallのソースはこちらにありますが、最新のgitレポジトリからクローンしてこれを使います。

git clone http://checkinstall.izto.org/checkinstall.git
cd checkinstall
make
make install

ここまでは普通にソースをコンパイル+インストールします。で、ここでcheckinstall自身もRPMにするために、その場でcheckinstallします。
checkinstallは/usr/local/sbin/に入りますので、下記コマンドでcheckinstallが走ります。

/usr/local/sbin/checkinstall
checkinstall 1.6.3, Copyright 2010 Felipe Eduardo Sanchez Diaz Duran   This software is released under the GNU GPL.
The checkinstallrc file was not found at:/usr/local/sbin/../checkinstallrc
Assuming default values.
The package documentation directory ./doc-pak does not exist. Should I create a default set of package docs? [y]: y
Preparing package documentation…OK
Please choose the packaging method you want to use.Slackware [S], RPM [R] or Debian [D]? r

RPM package creation selected *
This package will be built according to these values:
1 - Summary: [ CheckInstall installations tracker, version 1.6.2 ]2 - Name: [ checkinstall ]3 - Version: [ 20100920 ]4 - Release: [ 1 ]5 - License: [ GPL ]6 - Group: [ Applications/System ]7 - Architecture: [ x86</span>64 ]8 - Source location: [ checkinstall ]9 - Alternate source location: [ ]10 - Requires: [ ]11 - Provides: [ checkinstall ]
Enter a number to change any of them or press ENTER to continue:
Installing with make install…
(以下略)

ドキュメントを作るか?という質問のところでは”y”で、パッケージメソッドの選択のところではRPMなので”R”で。

****************************************** RPM package creation selected *****************************************
This package will be built according to these values:
1 - Summary: [ CheckInstall installations tracker, version 1.6.2 ]2 - Name: [ checkinstall ]3 - Version: [ 20100920 ]4 - Release: [ 1 ]5 - License: [ GPL ]6 - Group: [ Applications/System ]7 - Architecture: [ x86_64 ]8 - Source location: [ checkinstall ]9 - Alternate source location: [ ]10 - Requires: [ ]11 - Provides: [ checkinstall ]
Enter a number to change any of them or press ENTER to continue:

こんな感じで出力されると思いますので、問題なければENTERを押します。

**********************************************************************
Done. The new package has been saved to
/root/rpm/RPMS/x86_64/checkinstall-20100920-1.x86_64.rpm You can install it in your system anytime using:
rpm -i checkinstall-20100920-1.x86_64.rpm
**********************************************************************

RPMが作られます。

rpm -i /root/rpm/RPMS/x86_64/checkinstall-20100920-1.x86_64.rpm

でパッケージがインストールされます。
では次にrubyの最新版を入れます。ソースはこちらにあります。

cd ../
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p0.tar.gz

tar xzvf ruby-1.9.2-p0.tar.gz
cd ruby-1.9.2-p0
./configure --prefix=/usr

ここでprefixを/usrとするのは、prefixのデフォルトが/usr/localなので、普通PATHの通っている/usr/bin/rubyのほうにインストールするためです。このオプションをなしでconfigureすると/usr/local/bin/rubyにインストールされます。Amazon Linux AMIだとこちらにはパスが通っていないのでこちらにインストールした場合はパスを追加する必要があります。

make

コンパイルします。ここはちょっと時間がかかります。これをMicro Instanceでやろうとすると時間がかかって大変です。。。
で、次にmake install とやらずに、checkinstallを実行します。

/usr/local/sbin/checkinstall

同じようにすすめていくとRPMファイルが作られますので

rpm -i /root/rpm/RPMS/x86_64/ruby-1.9.2-p0-1.x86_64.rpm

これでOKです。

[root@ip-10-128-73-22 ruby-1.9.2-p0]# ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]

ちゃんと入りました。rubyのパッケージ管理システムであるgemも一緒にインストールされています。

[root@ip-10-128-73-22 ruby-1.9.2-p0]# gem -v
1.3.7

railsを入れます。今日(2010/09/20)時点ではデフォルトで3.0.0バージョンがインストールされます。

gem install rails

railsプロジェクトを作ります。とりあえずテストで。

cd /var/www/html/
rails new railssetup

作成されました。パーミッションの問題があるのでapacheユーザーにしておきます。

chown apache:apache railssetup/ -R

次にpassenger(mod_rails)を入れます。passengerはrailsを動かすapacheのモジュールです。

gem install passenger

passengerをセットアップします。

passenger-install-apache2-module

対話型の丁寧なインストラクションが始まります。

Checking for required software...
* GNU C++ compiler... not found
* Ruby development headers... found
* OpenSSL support for Ruby... not found
* RubyGems... found
* Rake... found at /usr/bin/rake
* rack... found
* Apache 2... not found
* Apache 2 development headers... not found
* Apache Portable Runtime (APR) development headers... not found
* Apache Portable Runtime Utility (APU) development headers... not found
Some required software is not installed.But don't worry, this installer will tell you how to install them.

こんな感じで入っていないものが表示されますので、それらを入れていきます。

yum install gcc-c++ openssl openssl-devel httpd httpd-devel

openssl support for Rubyを先ほど入れ忘れていました。yumでopensslを入れても、rubyのほうに入れないと動作しません。

cd ext/openssl
ruby extconf.rb

これでMakefileが作られますので同様にcheckinstallで入れておきます。

rpm -i /root/rpm/RPMS/x86_64/ruby-openssl-20100920-1.x86_64.rpm

再びチャレンジ。

passenger-install-apache2-module

正常に終わると、この行をapacheの設定ファイルに入れてね、というメッセージが出てきますのでやります。

vim /etc/httpd/conf/httpd.conf

LoadModule passenger_module /usr/lib/ruby/gems/1.9.1/gems/passenger-2.2.15/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.9.1/gems/passenger-2.2.15
PassengerRuby /usr/bin/ruby

217行目付近に書いておきました。
DocumentRootも設定しておきます。290行目付近。/publicを付け忘れないようにしてください。

DocumentRoot "/var/www/html/railssetup/public"

デフォルトでは本番環境モード(production)で動作しますので、今回はdevelopmentモードで動作するように環境変数を設定しておきます。下記の一行をDocumentRootの指定のすぐ下に入れておきます。”RailsEnv”で指定すると書いてあるところが多いですが、rails3からRackEnvになったようです・・・

RackEnv development

ウェブサーバーを起動。

/etc/init.d/httpd start

これで表示されるはず。

20100920ruby-2.png

ところがAbout your application’s environmentをクリックすると・・・

20100920ruby-3.png
sqliteがまだ入っていませんでした。sqlite3もyumにあるものではダメなので、ソースから入れる必要があります。こちらから。sqlite-amalgamationというので良いようです。

cd /usr/local/src/wget http://www.sqlite.org/sqlite-amalgamation-3.7.2.tar.gz
tar xzvf sqlite-amalgamation-3.7.2.tar.gz

cd sqlite-3.7.2/
./configure --prefix=/usr
make
/usr/local/sbin/checkinstallrpm -i /root/rpm/RPMS/x86_64/sqlite-3.7.2-1.x86_64.rpm
gem install sqlite3-ruby

20100920ruby-4.png

おつかれさまでした。ここまで来たらEC2のLarge Instanceはストップし、EBSからAMIを作って、そこからMicro Instanceで起動しなおせばOKです。
ここからはチュートリアルなり、なんなりと。素晴らしいことに和訳もあります。
ruby/rails/RailsGuidesをゆっくり和訳してみたよ/Rails Database Migrations – 株式会社ウサギィwiki
次は実際にrailsでソーシャルアプリ作ってみます。

最新記事

  • ドメインとブログ名を移転します。これまでを振り返って
  • 「これからのスマートフォンアプリ事業戦略」セミナーに参加してきました
  • PHPエンジニアむけ勉強会 Social Top Runners vo.2に参加しました #str2
  • (告知)PHPエンジニア向けイベント:STR Vo.2 “PHP x Social App”(CyberX,Sumzap,Pokelab,Cave,Klab)
  • Amazon Linux AMIでRuby 1.9.2 + Ruby on Rails3.0.0 (checkinstall, sqlite3, passenger etc..) 環境をセットアップ
  • News ClipをやめてTechnical Storyセクションに
  • Amazon Linux AMIをMicro Instanceで使ってみる
  • mixi meetup 2010 Social Leaders Conference に参加して
  • CEDEC2010 ソーシャルゲーム関連3セッションまとめ
  • 明日(9/2)、CEDECでしゃべります


  • TweetBox! by AM6.jp

    この記事にコメントする

    Technical Story

    Amazon Linux AMIでRuby 1.9.2 + Ruby on Rails3.0.0 (checkinstall, sqlite3, passenger etc..) 環境をセットアップ

    2010年09月20日(月)

    Amazon Linux AMIをMicro Instanceで使ってみる

    2010年09月18日(土)

    データマイニング+WEB勉強会 第6回発表資料とまとめ

    2010年08月22日(日)

    ブログパーツ

    あわせて読みたいブログパーツ