はじめに

このブログは現在、以下のような環境で動いている。

現在の環境

項目 内容
サーバ さくらのレンタルサーバ
言語 PHP
フレームワーク CakePHP
データベース MySQL

けど、主に経済的な理由から以下のような環境に移行したい。

目標

項目 内容
サーバ Heroku
言語 もちRuby
フレームワーク Rails
データベース PostgreSQL

単にサーバ代をけちりたいだけです。
めざせ!無料でブログサイト!

ということで無料のPaaSを探していたら、Google App Engineの他にHerokuに無料プランの存在を確認。
無料プランだとデータベースが5MBしか使えないらしいんだけど、今の僕のサイトが2MBも無いので、当分いいだろうと。
最近ブログも書く回数減っているしねえ。

ということで、作業を当たるに当たって備忘録を書いておこうと思う。
ここいらで自分の前提条件を書いておく。

現在の自分のスキル

  • Ruby「楽しいRuby」で楽しい気になっているだけで、ほとんどコードを書いたことがない
  • Rails初めて
  • Sinatoraは簡単だと聞いてちょこっとだけ触ったことがある
  • フレームワークはCakePHPよく使っている

まあ、いろいろ壁がありそうだけど、なんとかなるっしょ。
ということで初めてみる。

はじめてRailsに触る

つうことで、HerokuでRailsが動くらしいので、まずはRailsに慣れようと思う。
Sinatraの方がさくっと出来そうだけど、いい加減

「ん?なに?フレームワーク?Railsでいいんじゃない?やっぱアレだし」

って言いたいんです、すんません。

んで、Railsのチュートリアルやろうと思ったら日本語サイトがないじゃないかー。
Getting Started with Rails

こんな有名なアプリなのに無いってところがRubyの文化なのかしら。
ま、英語は読めませんがコードは読めるのでなんとかなるだろってことで前向きに進んでみる。

とりあえずrvmでさくっと環境を作る。
rvmについてはいろんなところで説明されているので、今回はパス。
あ、でも後日それはそれでまとめておこう。

3 新しくRailsプロジェクトを作る

で、railsインストール。

$ gem install rails
$ gem install sqlite3-ruby
$ gem install pg

個人的にはsqliteで良いんだけど、HerokuがPostgresなので環境を合わせとこうかなとPostgresのパッケージもインストール。
なんかデプロイする時にデータベース変更できるみたいなんだけど(そこがすげーよ、びっくりだよ)
どれがPostgres用のアダプタとして最適なのかがわからないので、ようわからんかった。
けど、pgで良いらしい、多分。

んで、アプリを作る。

$ rails new blog

言われるがまま以下のコマンドを叩く。

$ bundle install

どうやらこれで必要なgemsパッケージをインストールしてくれるくさい。
で、何が必要かは

/Gemfile

で指定するっぽ。

次にデータベースの設定だ。
ここで試しにPostgresを指定してみる。

# /config/databese.yml

development:
  adapter: postgresql
  encoding: unicode
  database: development
  pool: 5
  username: postgres
  password: postgres

続けてデータベースの作成。

$ rake db:create

pgパッケージがないぞ糞野郎!とか言われる。
んでいろいろ調べたらインストールしただけでは読み込まれないらしい。
で、どうするかというと以下のようにしたらOKだった。

# /Gemfile

+ gem 'pg', :require => 'pg'

ふむ、Gemfileの存在意義を理解した。
なるほど。

これみてbundkeコマンドも動いているんじゃないかな?
依存パッケージが一箇所に集まっているのはいいね。
んで、再度db:createでデータベースがちゃんと出来ているのを確認。
どこかでRailsは環境ごとにデータベースを作成するって言ってたけど、

development_blog

って出来ていたので納得。

4 こんにちわ、Rails

さて、いよいよHello,Railsだ。
PHPではフレームワークにWEBサーバまでくっついて来るってのは見たことがないんだけど、Rubyはそういうのばかりなんだよね。
Sinatraの時もそうだったし。

最初は

「なんだよ、めんどくせー」

って思っていたけども、わざわざWEBサーバの設定を気にせずにどこのディレクトリでも開発できるってのは確かにお手軽だわ。

んで、フレームワークに付属しているWebサーバで動かそうとすると大体

localhost:xxx

みたいなアドレスになるんだけど、実は私、VMWare上で開発しているんで、普通にやってもまず見られないことが多々。
ま、指定できるオプションあるだろうと調べたらやっぱりあった。
さすがだわー。
IPで指定するみたい。

$ rails server -b 192.168.xxx.xxx

これで

http:://192.168.xxx.xxx:3000

でアクセスしたらちゃんとみれた。
うむ、良いではないか。

が、すげー重いのな。
検索したらMongrelを使えばいいんじゃね?ってことなんで、言われた通りやってみる。

$ gem install mongrel

エラーが出た。

ERROR:  Error installing mongrel:
        ERROR: Failed to build gem native extension.

これどこかでみたことあるなあ。
多分rvm特有の問題だと思われる。
で、最新版を入れたらできた。

$ gem install mongrel --pre

--preをつけると最新版(非安定版)を入れれるみたい。
んで、Gemfileにも追加

# /Gemfile

+ gem 'mongrel'

これでサーバを再起動。

$  rails server -b 192.168.xxx.xxx
=> Booting Mongrel
=> Rails 3.0.5 application starting in development on http://192.168.xxx.xxx:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server

おー、Mongrelが起動したっぽい。
で、アクセスしてみたら、すげーはえー。
これば良い!
とりあえずはこれでいこう。
つか、なんだこの差は・・・。

んで、コントローラ作るっぽい。

$ rails generate controller home index

いろいろ出来た。
そして、構成がCakePHPそっくりでビックリする。
理解しやすくて助かるわー。

試しにViewを編集してみる。

# /app/views/home/index.erb

- Hello, Rails!</h1>
+ Hello, Rails! longkey1</h1>

んで、アクセス。

http:://192.168.xxx.xxx:3000/home/index

お、ちゃんと変わってる。
いちいちサーバは再起動しなくてもいいっぽい。
ふむふむ。

んで、今までの静的なindex.htmlを削除するらしい。

$ rm public/index.html

で、/でアクセスしてきた場合をHomeコントローラのindexメソッドに紐付ける。

# /config/routes.rb

Blog::Application.routes.draw do

  #...
  # You can have the root of your site routed with "root"
  # just remember to delete public/index.html.
  root :to => "home#index"

rootっていうのは特別なんだろうか。
ま、多分そうだろ。

長くなったので、とりあえずここまで。

「Getting Started with Rails」をやってみた(2)へ続く。