何年ぶりかの「10分でできるwebサイト」
Ruby on Railsをインストールして、f2pを動かしてみた。フレームワークを準備するのに数時間かかって、その先のdeployは一瞬というところがRoRの醍醐味(汗
bloggerのサイトだとコードが読みにくいので、こちらに日本語で手順をポスト
まず、今回セットアップしたのは、Nahiによる、ffp(f2p)というアプリケーションで、FriendFeedを携帯端末で利用しやすくしよう、というもの。
ソースはgithubにある。http://github.com/nahi/f2p/tree/master
自分の環境であるCentOS5.2(Xen3上のDom-U)では、デフォルトではrubygemsも何もないので、そこから手順を記載しますが、すでにRoRとgitがセットアップされているなら、そこはすっとばしてください。
CentOS5.2でのRuby on RailsのSetupの例
まず、rubygemが依存しているrdocをインストール
# yum install rdoc Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Installing: ruby-rdoc i386 1.8.5-5.el5_2.6 updates 136 k Updating: ruby i386 1.8.5-5.el5_2.6 updates 280 k ruby-libs i386 1.8.5-5.el5_2.6 updates 1.6 M Installing for dependencies: ruby-irb i386 1.8.5-5.el5_2.6 updates 69 k Updating for dependencies: ruby-devel i386 1.8.5-5.el5_2.6 updates 555 k
あらためてrubygem(1.3.1)のインストール
# wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz # tar zxf rubygems-1.3.1.tgz # cd rubygems-1.3.1 # ruby setup.rb
そこでやっとRuby on Railsのインストール開始
# gem install rails Successfully installed rake-0.8.3 Successfully installed activesupport-2.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 7 gems installed Installing ri documentation for rake-0.8.3... Installing ri documentation for activesupport-2.2.2... 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 RDoc documentation for rake-0.8.3... Installing RDoc documentation for activesupport-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...
ここでちょっとrailsで「10分でアプリを立ち上げ」体験してみる。単に体験するだけではなくて、設定が十分にできているかは、serviceを起動してみないとわからない部分もあるのだ。ここが味噌(汗
$ mkdir rails $ rails /home/username/rails exists create app/controllers create app/helpers (中略) create log/development.log create log/test.log
デフォルトではRoRのサービスは3000番のポートを使う。良い子のサーバはiptablesなどで余計なポートは塞いであるはずだから、あらためてポートを開けないと、ブラウザからアクセスできないのが普通(sshで接続してport forwardingする、という手もあるけれど、そうなるとホスト名の解決のところでハマることもあるので注意)
# iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
http://webserver.yourdomain:3000/ っていうのはちょっと不恰好かなー、と思うのなら、apache(httpd)でreverse proxyを設定する手もある(これが原因で、パスのタイプによってはうまく処理されないこともあるけど)
ProxyPass /ffp/ http://webserver.yourdomain:3000/ ProxyPassReverse /ffp/ http://webserver.yourdomain:3000/
それでは、サーバを立ち上げよう。
$ cd rails $ script/server => Booting WEBrick... => Rails 2.2.2 application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2009-02-16 09:30:40] INFO WEBrick 1.3.1 [2009-02-16 09:30:40] INFO ruby 1.8.5 (2006-08-25) [i386-linux] [2009-02-16 09:30:40] INFO WEBrick::HTTPServer#start: pid=16622 port=3000 192.168.0.51 - - [16/Feb/2009:09:30:48 JST] "GET / HTTP/1.0" 200 7385- -> / 192.168.0.51 - - [16/Feb/2009:09:33:45 JST] "GET / HTTP/1.1" 200 7385- -> / 192.168.0.51 - - [16/Feb/2009:09:33:45 JST] "GET /javascripts/prototype.js HTTP/1.1" 200 129738 http://yourpublicserver/ffp/ -> /javascripts/prototype.js 192.168.0.51 - - [16/Feb/2009:09:33:46 JST] "GET /javascripts/effects.js HTTP/1.1" 200 38675 http://yourpublicserver/ffp/ -> /javascripts/effects.js 192.168.0.51 - - [16/Feb/2009:09:33:46 JST] "GET /images/rails.png HTTP/1.1" 200 6646 http://yourpublicserver/ffp/ -> /images/rails.png 192.168.0.51 - - [16/Feb/2009:09:34:02 JST] "GET /rails/info/properties HTTP/1.1" 500 13415 http://yourpublicserver/ffp/ -> /rails/info/properties
上のログでもわかるとおり、propertiesを表示しようとしたら500(internal serer error)になった。画面の表示は以下のとおりで、
MissingSourceFile no such file to load -- sqlite3
というわけで、sqliteをインストールする必要があることがわかる。
ちなみに、Rails + sqlite3 の落とし穴 - まちゅダイアリー(2007-01-17)によれば、sqlite3はSWIGに依存しているので、そちらを先にインストールする必要がある。この辺はrpmになっててくれ、と思うところだ<ならば自分でせよ。
SWIGのインストールは、それが必要だとわかってしまえば簡単だ
まず、ダウンロードしてくる。http://www.swig.org/download.html
そして、展開してmakeだ
# tar zxf swig-1.3.38.tar.gz # cd swig-1.3.38 # ./configure && make && make install
sqliteのインストールはさらに簡単だ。さすがにgemである。でも、gemでインストールできない依存関係もちゃんと示しておいてくれるとさらに良かったかも(SWIGはnice to haveなのだろうか?)
# gem install sqlite3-ruby Building native extensions. This could take a while... Successfully installed sqlite3-ruby-1.2.4 1 gem installed Installing ri documentation for sqlite3-ruby-1.2.4... Installing RDoc documentation for sqlite3-ruby-1.2.4...
これでrailsのアプリケーションの表示も正常になる。たとえばこんな風に環境が表示される。Ruby savvyな方はノけぞるかもしれないが、CentOS5.2(RHEL5相当)ってば、ちゃんとyum update rubyしてもこんなもん(1.8.5)である。
Now your Environment seems OK About your application’s environment Ruby version 1.8.5 (i386-linux) RubyGems version 1.3.1 Rails version 2.2.2 Active Record version 2.2.2 Action Pack version 2.2.2 Active Resource version 2.2.2 Action Mailer version 2.2.2 Active Support version 2.2.2 Application root /home/yourname/ffp Environment development Database adapter sqlite3 Database schema version 0
やっと本題のf2p(ffp)のセットアップである
まず、githubからコードをとってくる。gitはインストールされていますか?そうでないなら→A-Liaison BLOG: githubに自分のリポジトリを作ってコミットしてみるなどがお役に立つかも。
$ cd working_directory
$ git clone git://github.com/nahi/f2p.git
2009.2.17現在のコードだと、暗号化の鍵や、googlemapのAPIにアクセスする鍵などを修正してから運用することなるけれども、まずは起動。実はまだセットアップは完了していないのだ。
$ script/server => Booting WEBrick... Missing these required gems: httpclient json You're running: ruby 1.8.5 at /usr/bin/ruby rubygems 1.3.1 at /home/yourname/.gem/ruby/1.8, /usr/lib/ruby/gems/1.8 Run `rake gems:install` to install the missing gems.
というわけで、RoRとは別にこのアプリ専用にhttpclientとjsonをインストールする必要があるとわかる。
この場合、メッセージの通り単純に rake gems:install とタイプしてもダメである。
$ rake gems:install (in /home/username/f2p) ** Invoke gems:install (first_time) ** Invoke gems:base (first_time) ** Execute gems:base ** Invoke environment (first_time) ** Execute environment rake aborted! no such file to load -- httpclient
まずはhttpclientのコードを取ってくる必要がある。404 Not Found
にある。
# wget http://dev.ctor.org/download/httpclient-2.1.4.tar.gz # tar zxf httpclient-2.1.4.tar.gz # cd httpclient-2.1.4 # ruby install.rb
jsonについても同様だが、こちらはgemでとってこれる。
# gem install json
この状態で、やっとサービスは立ち上がる。(まだ鍵の設定はしていないので、本番運用はダメ)
$ script/server => Booting WEBrick... => Rails 2.2.2 application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2009-02-16 10:53:05] INFO WEBrick 1.3.1 [2009-02-16 10:53:05] INFO ruby 1.8.5 (2006-08-25) [i386-linux] [2009-02-16 10:53:05] INFO WEBrick::HTTPServer#start: pid=25199 port=3000 192.168.0.51 - - [16/Feb/2009:10:53:15 JST] "GET / HTTP/1.1" 302 110 - -> / 192.168.0.51 - - [16/Feb/2009:10:53:16 JST] "GET /login HTTP/1.1" 200 863 - -> /login 192.168.0.51 - - [16/Feb/2009:10:54:02 JST] "POST /login/authenticate HTTP/1.1" 500 13753 http://b137053.ppp.asahi-net.or.jp/f2p/login -> /login/authenticate
上記のようにログイン失敗する。やるべきことは、
- データベースのmigrate 参照:本番環境でテーブルがないと怒られた - DUNNO-CLEARブログ2.0
- 鍵の生成、登録
まず、データベースのmigrateは次のようにして行う。
$ rake RAILS_ENV=production db:migrate
もし、productionの状態でアプリケーションを公開していない状態ならば、developmentのdbを更新。でも、productionの状態にしておくことをお薦め(repositoryのコードや、各種ドキュメントはそれを前提にしているだろうから)。。。でも私、まだproductionの状態にする方法を知りません、、だって、使い始めて10分ですから(ぉ
$ rake RAILS_ENV=development db:migrate
次に、鍵の生成と登録は、ランダムな16バイトということで
# ruby -ropenssl -e 'p OpenSSL::Random.random_bytes(16).unpack("H*")[0]' # vi app/controllers/application.rb protect_from_forgeryのsecretの値を上記の文字列に書き換え
他に、googleMapの画像をちゃんと表示したい場合は、GoogleMap APIの鍵を取得する必要がある→Google Maps API に登録する - Google Maps API — Google Developers
取得した鍵は、config/environment.rb のF2P::Config.google_maps_api_keyに設定。