一分一秒真剣勝負!

Ruby, Railsなど。Web系の技術ネタを充実させたい・・が、そうなるかは分からない。

rvmからrbenvへ移行

 実装がコロコロ変わったりしてupdateしたら動かなくなったりするとか叩かれているrvmですが、実際僕も同じ現象に遭遇した事があり、rubyのバージョン管理をrbenvに移行することにしました。37signalsの中の人が作っているので、まあ普及するかなと。OSはLionです。

rvm削除。

$ rvm implode
$ rm -rf ~/.rvm

brewでrbenv,ruby-buildをインストール。

$ brew install rbenv ruby-build

.bash_profileに以下を追加

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

よし、rubyをインストールだ・・・!と、思ったらエラー。

$ rbenv install 1.9.2-p290

ERROR: This package must be compiled with GCC, and we
couldn't find a suitable `gcc' binary on your system.
Please install GCC and try again.

As of version 4.2, Xcode is LLVM-only and no longer
includes GCC. You can install GCC with these binary
packages on Mac OS X:

https://github.com/kennethreitz/osx-gcc-installer/downloads


BUILD FAILED

どうやらLionからgccを使わなくなった様子。指示通りgccをDL&installで問題なく入りました。
使い方はrbenv + ruby-buildのインストール方法 - 223 Softwareで基本的なコマンドがよくまとまっています。詳しく知りたかったらgithubを参照。

で、そのままRailsを立ち上げたらエラー発生。

NoMethodError (undefined method `clear_active_connections!' for ActiveRecord::Base:Class):

ちょっと焦って色々探したのですが、bundle installした時にrvmを使っていたのが原因かな?と思ってvendor/bundleをrm -rfした後にbundle installしたら無事起動しました。良かった。

Ruby on Railsの情報源まとめ

 個人的にRails関連でよく見るサイトをまとめてみた。殆ど英語でしか書いてないサイトばっかりですね。

Ruby on Rails Guides - http://guides.rubyonrails.org/

公式サイトのRailsチュートリアル。初心者向けを前提にしているようですが、Railsでどう書いたっけ?と思ったらまず最初に見ます。

Ruby on Rails Documentation - http://api.rubyonrails.org/

RailsのRDocです。いつの間にか検索が使いやすくなってます。

RailsCasts - http://railscasts.com/

RailsのTipsサイト。動画で解説しているのが凄い。ここを見ているだけで今どんなライブラリが流行っているのか大体分かるのでチェックしてます。

ASCIIcasts - http://ja.asciicasts.com/

RailsCastsをテキストにしたサイト。全てでは無いけど和訳済みのエントリーがある。

Rails Best Practices - http://rails-bestpractices.com/

タイトルそのまんま。Railsのベストプライスなコードのサンプルを掲載しているサイト。rubygemsがあって、これを使うとこのサイトのコードを元にチェックしてくれます。C言語のlintみたいな感じですね。

The Ruby Toolbox Search - http://www.toolboxsearch.tk/

RubyGemsなのでRailsだけではないけど、主にRailsでメジャーなライブラリを調べる時に使ってます。

HerokuでRails3.1+sqlite3アプリをデプロイする!

 GitのリポジトリをpushするだけでデプロイまでしてくれるHerokuでRialsアプリをデプロイしてみました!友人の居酒屋サイトを作成中なんですが、凄い便利ですねHeroku。以下はherokuを使う時のまとめ。ちなみにRails3.1でデプロイしたものの、実装はほぼ3.0.9のままで、DBはsqlite3です。

アカウント作成

以下のURLから新規登録する。
http://api.heroku.com/signup

事前準備

$ gem install heroku # heroku利用時に必要なgem
$ heroku keys:add # username/passを保存しておく

Gemfile

 このエントリーを書いている時点では、この問題がある為、以下のgemを入れておかないとpushできないですね。

group :production do
  gem 'therubyracer-heroku', '0.8.1.pre3' # you will need this too
  gem 'pg'
end

Railsアプリ作成

$ rails new hoge
$ git init
$ git add .
$ git commit -m 'first commit'

herokuにアプリを作成・デプロイ

$ heroku create # heroku上でアプリケーションを作成するコマンド
# https://api.heroku.com/loginでherokuにログインし、アプリケーションの名前を変更する

$ vi .git/config # リポジトリ名をブラウザで変更した名前に修正する
[remote "heroku"]
url = git@heroku.com:変更したアプリ名.git
# これをやっておかないとリポジトリが見つからずにpushできなくなる

$ git push heroku master # herokuにリポジトリをpushし、デプロイも実行
$ heroku open # ブラウザが起動し、サイトを表示する

その他よく使うコマンド

dbのmigrate
$ heroku rake db:migrate # heroku上でmigrate
dbのダウンロード
$ heroku db:pull sqlite://保存先のパス/保存したいファイル名
# 例
$ heroku db:pull sqlite://db/production.sqlite3
dbのアップロード
$ heroku db:push sqlite://パス/アップロードするファイル名
# 例
$ heroku db:push sqlite://db/production.sqlite3

 このコマンド実行時にアプリ名を入力する必要があります。省略する為のオプションもあるのですが僕は使ってません。

参考

HerokuでDBのデータをダウンロードしたりアップロードしたり - アインシュタインの電話番号☎

 とりあえず基本的なコマンドはこんな感じ。無料プランだとDBが5Mまでと少なすぎですが、簡単なアプリを作るには十分ですね。

Rails3レシピブック 190の技

Rails3レシピブック 190の技

Rails3レシピブック 190の技


 買いました!前作は立ち読み程度にパラパラとしか見ていなかったので、逆引き系の本なんだろうなーと思って読んだらそんなことはなく、Rails未経験者でも順を追ってRailsを学べる作りになっていました。しかしレシピブックというだけあって、目次から調べれば逆引きもできる作りになっていて、どちらでも使える良書だと思います。
 Railsは1.x系から使ってるんですが、ネットでの情報収集をメインにやってきた人にもお勧めですね。2.1ぐらいまではchangelogを確認して差分をメモ・・という作業をしたりしてたけど、流石に仕事が忙しいのとchangelog意外にも実は変更点があったりするのがrailsですから、最近差分を追わずにrails guideを見ていた僕には見落としてる新機能も発見できて良かったです。やっぱり書籍になってると情報がまとまっていていいですね。

Factory Girlの新しいシンタックスが素敵

 キタコレ。

 旧シンタックスがこれ。なんだか残念な感じですね。

Factory.sequence :email do |n|
  "email#{n}@example.com"
end

Factory.define :user do |factory|
  factory.name  { "Ron Burgundy" }
  factory.email { Factory.next(:email) }
end

Factory.define :admin, :parent => :user do |factory|
  factory.admin { true }
end

Factory.define :dog do |factory|
  factory.name { "Baxter" }
  factory.association(:owner, :factory => :user)
end

 新シンタックスがこれ!素晴らしい!

FactoryGirl.define do
  sequence :email do |n|
    "email#{n}@example.com"
  end

  factory :user, :aliases => [:owner] do
    name "Ron Burgundy"
    email

    factory :admin do
      admin true
    end
  end

  factory :dog do
    name "Baxter"
    owner
  end
end

 素敵過ぎる。こりゃ今までblueprintとか使ってた人も流れてくるんじゃねと思った。
【追記】コメ欄でblueprintってCSSじゃない?というツッコミがありましたが、これは書式のことです。FGでもMachinistでも使えるんですが、CSSフレームワークでも同名のものがありますね。紛らわしい。

rakeタスクでurl_helperを使うには

 なんかrakeタスクでurl_helper使えねーなーと、思ってたんだけどモジュールをincludeしてからdefault_url_options[:host]にホスト名を設定してやれば動くことが分かった。

include Rails.application.routes.url_helpers
default_url_options[:host] = "d.hatena.ne.jp"

 あぶなく全部べた書きするところだった。

collection_selectに:selectedオプションが欲しいが、Rails3にも無いっぽい

 やっと仕事でRails3を使い始めたので、collection_selectに:selectedオプションが動くようになってるかなーと思ったんだけど、ダメでした。なので今まで通りselectで以下のように書いいてます。

  <% form_for @user do |f| %>
  <% f.select(:item_id, Item.all.collect { |i| [i.name, i.id] }, :html=>{ :selected => @item.id }) %>
  <% end %>

 プルダウンリストで:selectedを指定するにはselectで書くしかないのだろうか。