Amazon Linux AMIにRuby on Railsの環境を構築
そろそろPaaSに手を出そうと思いましてまずはRuby on Rails(RoR)でも覚えようかなと思っています。PaaSと言えばGAE・Force.com・Windows Azureも有力ですけど、自由度とお手軽さを重視するとHerokuや今後RoRに対応する予定のBeanstalkの方が良さそうなイメージがあったのでこちらに決めました。だったらいきなりHerokuにすればという話もありますが、EC2も使ってみたかったのでというのでEC2+RoRでスタート。
Amazon Web Servicesの申し込み
まずは土台となるEC2を使うためにAWSの申し込み。AWSのアカウントは買本でAmazonのAPIを呼び出すのですでに作成済みだったので、EC2の利用申し込みから実施。
細かい手順は忘れてしまいましたが、Webフォームから申し込みをして電話で番号をプッシュして、クレジットカード情報を登録しておしまいぐらいの簡単な手順ですぐに終わりました。
EC2でインスタンスの起動
Basic 32-bit Amazon Linux AMI 2011.02.1 Beta (AMI Id: ami-300ca731)というイメージを無料利用枠で使えるInstance Type: Microで起動しました。AWS Management Consoleから画面の指示に従って設定するだけなのでこれも簡単に終了。
Tokyoリージョンで起動しましたけどタイムゾーンはUTCですね。何か不都合があるまではそのままにしておこうと思います。
RoRのインストール
入れるのはRoR3です。新規に始めるので新しいバージョンを使います。インストールはRuby on Rails 3.0 日記を参考にしました。
Rubyが入っていないと駄目だし古いバージョンでも駄目なのでバージョンを確認。
$ ruby -v ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-linux]
問題ないバージョンでした。ちなみにRuby関連のインストール状況はこんな感じ。
$ yum list | grep ruby ruby.i686 1.8.7.330-1.5.amzn1 installed ruby-libs.i686 1.8.7.330-1.5.amzn1 installed graphviz-ruby.i686 2.26.0-4.12.amzn1 amzn-main libselinux-ruby.i686 2.0.98-1.9.amzn1 amzn-main rrdtool-ruby.i686 1.3.8-6.6.amzn1 amzn-main ruby-devel.i686 1.8.7.330-1.5.amzn1 amzn-main ruby-irb.noarch 1.8.7.330-1.5.amzn1 amzn-main ruby-mysql.i686 2.8.2-1.3.amzn1 amzn-main ruby-rdoc.noarch 1.8.7.330-1.5.amzn1 amzn-main ruby-ri.i686 1.8.7.330-1.5.amzn1 amzn-main ruby-static.i686 1.8.7.330-1.5.amzn1 amzn-main rubygems.noarch 1.3.7-1.7.amzn1 amzn-main
次はRoRのインストールですがgemが入っていないので先にそちらをインストール。
$ sudo yum install rubygems
これであっさり入りました。引き続きRoRをインストール。
$ sudo gem install rails
これで入りましたが結構時間がかかりました。特にドキュメント生成の時間が長かったのでドキュメントは外しても良かったかもしれません。
最後のメッセージが File not found: libで終わっていたので何か失敗しているようなのですけど、gemのインストールは成功しているので気にせず次へ。
バージョンを確認してみる。
$ rails -v Rails 3.0.7
ここで一旦切ってバックアップを取りました。バックアップはAWS Management Consoleからインスタンスを停止したあとCreate Image(EBS AMI)を実行。これで起動用のAMIの作成が完了。
本当に起動できるかを早速確認ということで、新しいインスタンスを起動。無事起動してRoRも入っていました。これでさっき停止したインスタンスは入らなくなったのでTerminateで消しました。
ただこの方法でバックアップを取ると無料利用枠を超えてしまうような気がするので、そのうち消すかもしれません。
SQLiteのインストール
MySQLでも良いのですが、参考にしているサイトがSQLite3だったのでそれに合わせることに。ここははまってしまってすごく苦労しました。終わってみれば大したことはなくて、もう一度やる分にはすぐ終わると思います。
SQLiteのインストール状況を確認。
$ yum list | grep sqlite python-sqlite.i386 2.6.0-1.8.amzn1 installed sqlite.i686 3.6.20-1.8.amzn1 installed apr-util-sqlite.i686 1.3.9-3.9.amzn1 amzn-main libdbi-dbd-sqlite.i686 0.8.3-5.1.3.amzn1 amzn-main sqlite-devel.i686 3.6.20-1.8.amzn1 amzn-main sqlite-doc.i686 3.6.20-1.8.amzn1 amzn-main sqlite-tcl.i686 3.6.20-1.8.amzn1 amzn-main $ sqlite3 -version 3.6.20
とりあえずこれでいけるかなと思ってRoRの新規アプリケーションの作成を実行したら成功。続いてアプリケーションの起動。
$ rails server Could not find gem 'sqlite3 (>= 0, runtime)' in any of the gem sources listed in your Gemfile.
駄目でした。やっぱりサイトに書いてある手順には従わないと駄目ですね、ということでgemでsqlite3のインストール。
$ sudo gem install sqlite3 Building native extensions. This could take a while... ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/sqlite3-1.3.3 for inspection. Results logged to /usr/lib/ruby/gems/1.8/gems/sqlite3-1.3.3/ext/sqlite3/gem_make.out
ヘッダファイルがなかったので追加。
$ sudo yum install ruby-devel
再挑戦。
$ sudo gem install sqlite3 Building native extensions. This could take a while... ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb checking for sqlite3.h... no (以下略)
ここも手順を飛ばしていたところなので実行。
$ sudo yum install sqlite-devel
今度は成功するはず。
$ sudo gem install sqlite3 Building native extensions. This could take a while... ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb checking for sqlite3.h... no (以下略)
sqlite3.h is missing. と言われました。あるんですけどね。
$ ls -l /usr/include/sqlite3.h -rw-r--r-- 1 root root 268966 Jan 17 10:24 /usr/include/sqlite3.h
場所が分からないのかなと思ってインクルードパスを指定して実行。
$ sudo gem install sqlite3 -- --with-sqlite3-include=/usr/include Building native extensions. This could take a while... ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb --with-sqlite3-include=/usr/include checking for sqlite3.h... no (以下略)
駄目でした。スラッシュが足りないのかもと思って--with-sqlite3-include=/usr/include/と最後にスラッシュを付けても同じ結果。
で、いろいろあってgccがないよというのでインストール。
$ sudo yum install gcc
$ sudo gem install sqlite3 Building native extensions. This could take a while... ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb checking for sqlite3.h... yes checking for sqlite3_libversion_number() in -lsqlite3... yes checking for rb_proc_arity()... no checking for sqlite3_initialize()... yes checking for sqlite3_next_stmt()... yes checking for sqlite3_backup_init()... yes checking for sqlite3_column_database_name()... yes checking for sqlite3_enable_load_extension()... yes checking for sqlite3_load_extension()... yes creating Makefile make sh: make: command not found
進みました。makeがないよというのでインストール。
$ sudo yum install make
ここまでやって次のコマンドで無事インストールが完了しました。
$ sudo gem install sqlite3
動作確認
$ rails server
今度はこれで無事起動したのでブラウザからアクセスですが、その前にAWS Management ConsoleからSecurity Groupsの設定で3000番ポートを開けておきます。
この状態でブラウザからアクセスすると無事画面が表示されました。