Hatena::ブログ(Diary)

いたさんの日記

2011-04-20

CloudFoundryを試してみた

VMwareが発表したオープンソースのPaaS基盤、CloudFoundryを早速試してみました。

手順は、下記のリポジトリに書いてあるとおりですが、ちょっとした注意事項を書いておきたいと思います。

https://github.com/cloudfoundry/vcap

pg 拡張ライブラリコンパイルが失敗する。

インストーラーは、PostgreSQLインストールしてくれますが、pgライブラリコンパイルに必要なソースライブラリインストールしてくれないので、バイナリコンパイルが失敗します。セットアッププログラムの実行後に、手動でインストールしてコンパイルし直しが必要です。

sudo apt-get install postgresql-server-dev-8.4

sudo gem install pg

rake testsが失敗する。

インストール終了後のCucumberテストが失敗します。どうもRailsインストールされていないことによる失敗のようです。

後続のRSpecテストを実行するとRailsインストールされ、Cucumberも成功するようになるようです。

2010-09-24

Rails3で自分専用のブログを作る(17) ─ featureを日本語化する

Cucumberのfeatureを日本語で記述したいので、web_steps.rbを日本語化するweb_ja_steps.rbを作成しました。翻訳はid:moroさんのmoro-misoを参考にしました。

# coding: UTF-8
Given /^"([^\"]*)"ページを表示している$/ do |page_name|
  Given /^I am on #{page_name}$/
end

When /^"([^\"]*)"ページを表示する$/ do |page_name|
  When /^(?:|I )go to #{page_name}$/
end

When /^(?:"([^\"]*)"の)?"([^\"]*)"ボタンをクリックする$/ do |selector ,button|
  When /^(?:|I )press "#{button}"(?: within "#{selector}")?$/
end

When /^(?:"([^\"]*)"の)?"([^\"]*)"リンクをクリックする$/ do |selector, link|
  When /^(?:|I )follow "#{link}"(?: within "#{selector}")?$/
end

When /^(?:"([^\"]*)"の)?"([^\"]*)""([^\"]*)"と入力する$/ do |selector, field, value|
  When /^(?:|I )fill in "#{field}" with "#{value}"(?: within "#{selector}")?$/
end

#When /^(?:|I )fill in "([^"]*)" for "([^"]*)"(?: within "([^"]*)")?$/ do |value, field, selector|
#  with_scope(selector) do
#    fill_in(field, :with => value)
#  end
#end

# Use this to fill in an entire form with data from a table. Example:
#
#   When I fill in the following:
#     | Account Number | 5002       |
#     | Expiry date    | 2009-11-01 |
#     | Note           | Nice guy   |
#     | Wants Email?   |            |
#
# TODO: Add support for checkbox, select og option
# based on naming conventions.
#
When /^(?:"([^\"]*)"の中に)?以下の項目を入力する:$/ do |selector, fields|
  When /^(?:|I )fill in the following(?: within "#{selector}")?:$/
end

When /^(?:"([^\"]*)"の)?"([^\"]*)"から"([^\"]*)"を選択する$/ do |selector, field, value|
  When /^(?:|I )select "#{value}" from "#{field}"(?: within "#{selector}")?$/
end

When /^(?:"([^\"]*)"の)?"([^\"]*)"をチェックする$/ do |selector, field|
  When /^(?:|I )check "#{field}"(?: within "#{selector}")?$/
end

When /^(?:"([^\"]*)"の中の)?"([^\"]*)"のチェックを外す$/ do |selector, field|
  When /^(?:|I )uncheck "#{field}"(?: within "#{selector}")?$/
end

When /^(?:"([^\"]*)"の中の)?"([^\"]*)"を選択する$/ do |selector, field|
  When /^(?:|I )choose "#{field}"(?: within "#{selector}")?$/
end

When /^(?:"([^\"]*)"の中の)?"([^\"]*)"としてファイル"([^\"]*)"を選択する$/ do |selector, field, path|
  When /^(?:|I )attach the file "#{path}" to "#{field}"(?: within "selector")?$/
end

Then /^次のJSONがえられること:$/ do |expected_json|
  Then /^(?:|I )should see JSON:$/
end

Then /^(?:"([^\"]*)"に)?"([^\"]*)"と表示されていること$/ do |selector, text|
  Then /^(?:|I )should see "#{text}"(?: within "#{selector}")?$/
end

Then /^(?:"([^\"]*)"に)?\/([^\/]*)\/と表示されていること$/ do |selector, regexp|
  Then /^(?:|I )should see \/#{regexp}\/(?: within "#{scope}")?$/
end

Then /^(?:"([^\"]*)"に)?"([^\"]*)"と表示されていないこと$/ do |selector, text|
  Then /^(?:|I )should not see "#{text}"(?: within "#{selector}")?$/
end

Then /^(?:"([^\"]*)"に)?\/([^\/]*)\/と表示されていないこと$/ do |selector, regexp|
  Then /^(?:|I )should not see \/#{regexp}\/(?: within "#{selector}")?$/
end

Then /^(?:"([^\"]*)"の中の)?入力項目"([^\"]*)""([^\"]*)"と表示されていること$/ do |selector, field, value|
  Then /^the "#{field}" field(?: within "#{selector}")? should contain "#{value}"$/
end

Then /^(?:"([^\"]*)"の中の)?入力項目"([^\"]*)""([^\"]*)"と表示されていないこと$/ do |selector, field, value|
  Then /^the "#{field}" field(?: within "#{selector}")? should not contain "#{value}"$/
end

Then /^(?:"([^\"]*)"の中の)?"([^\"]*)"がチェックされていること$/ do |selector, label|
  Then /^the "#{label}" checkbox(?: within "#{selector}")? should be checked$/
end

Then /^(?:"([^\"]*)"の中の)?"([^\"]*)"がチェックされていないこと$/ do |selector, label|
  Then /^the "#{label}" checkbox(?: within "#{selector}")? should not be checked$/
end

Then /^"([^\"]*)"ページを表示していること$/ do |page_name|
  Then /^(?:|I )should be on #{page_name}$/
end

Then /^次のクエリストリングが得られること:$/ do |expected_pairs|
  Then /^(?:|I )should have the following query string:$/
end

Then /^ページを表示する$/ do
  Then /^show me the page$/
end

また、featureジェネレータが作成したarticles_steps.rbにも追記を行いました。

Given /^次の記事があるとき:$/ do |articles|
  Given /^the following articles:$/
end

When /^(\d+)番目の記事を削除する$/ do |pos|
  When /^I delete the #{pos}(?:st|nd|rd|th) article$/
end

Then /^次の記事が表示されること:$/ do |expected_articles_table|
  Then /^I should see the following articles:$/
end

これでfeatureも日本語化できます。manage_articles_ja.featureというファイル名にしました。

# language: ja
フィーチャ: 記事を管理する
  [ゴール]に到達するために
  [ステークホルダ]は
  [振る舞い]が欲しい

  シナリオ: 新しい記事を登録する
    "前提"    "the new article page"ページを表示している
    "もし"    "title 1"に"Title"と入力する
    "かつ"    "body 1"に"Body"と入力する
    "かつ"    "Create"ボタンをクリックする
    "ならば"  "title 1"と表示されていること
    "かつ"    "body 1"と表示されていること

  シナリオ: 記事を削除する
    "前提"    次の記事があるとき:
      |title|body|
      |title 1|body 1|
      |title 2|body 2|
      |title 3|body 3|
      |title 4|body 4|
    "もし"    3番目の記事を削除する
    "ならば"  次の記事が表示されること:
      |Title|Body|
      |title 1|body 1|
      |title 2|body 2|
      |title 4|body 4|

「前提」、「もし」、「ならば」、「かつ」などをダブルクォーテーションで括っているのは、括らないとエラーになるため。以前は引用符なしでも大丈夫だったのですが、Ruby 1.9正規表現の動作(単語の境界の検出)が変わったのが原因かもしれません。それにしても、「フィーチャ」や「シナリオ」が大丈夫なのは変ですがコロンで分離されているからでしょうか。

2010-08-26

Rails3で自分専用のブログを作る(14) ─ Cucumber, RSpecをgenerate

Railsアプリを生成した後、CucumberやRSpecを生成していなかったので、生成する事にします。

まず、cucumber-rails の README を参照すると、Gemfileに下記の追加を行う必要があるらしい。

gem 'capybara'
gem 'database_cleaner'
gem 'cucumber-rails'
gem 'cucumber'
gem 'rspec-rails'
gem 'spork'
gem 'launchy'

これを追記して bundle install を実行します。おっと、nokogiriのインストールでエラーに。libxslt関連のヘッダがないようです。

sudo apt-get install libxslt-dev

を実行してから、再び bundle install で大丈夫になりました。これで、cucumber を生成できます。

ruby script/rails generate cucumber:install --help

でオプションを確認し、次のように生成しました。

ruby script/rails generate cucumber:install --capybara  --rspec

つぎはRSpec です。Gemfileにrspec-railsが登録済なので、次のようにうってみると、

ruby script/rails generate rspec:install

rspec generatorが見つからないとのエラー。調べてみると、Rails 3に対応したRSpecは 2.0ですが、正式リリースはされていません。

gem install rspec-rails --pre

で 2.0.0.beta.20がインストールできました。ただ、このままでbundle install しても、rspecは古いままなので、Gemfileのrspec関係の記述を次のように修正しました。

gem 'rspec-rails', '2.0.0.beta.20'
gem 'rspec', '2.0.0.beta.20'

これでbundle install してから、

ruby script/rails generate rspec:install

これでOKでした。

2010-08-22

Rails3で自分専用のブログを作る(12) ─ Railsアプリを生成

新しくRailsアプリを生成します。ディレクトリとREADMEを生成済みなので、上書きを指定する -f を指定します。また、テストにはRspecを使用するのでtestディレクトリ以下の生成を抑制する -T スイッチを指定しました。

$ cd ~
$ rails new DIY-Blog -d postgresql -f -T

gitリポジトリに登録しておきます。

$ cd DIY-Blog
$ git add -A
$ git commit -m "rails app generated"

Rails3で自分専用のブログを作る(11) ─ Cucumber と Rspec をインストール

今回の開発はBDDでやってみようと思うので、Cucumber と Rspecインストールします。

Cucumberは、cucumber-railsを指定してインストール

masatoshi@ubuntu:~$ gem install cucumber-rails
Building native extensions.  This could take a while...

(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)

                     (::)   U P G R A D I N G    (::)

Thank you for installing cucumber-0.8.5.
Please be sure to read http://wiki.github.com/aslakhellesoy/cucumber/upgrading
for important information about this release. Happy cuking!

(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)

Successfully installed trollop-1.16.2
Successfully installed gherkin-2.1.5
Successfully installed term-ansicolor-1.0.5
Successfully installed diff-lcs-1.1.2
Successfully installed json_pure-1.4.6
Successfully installed cucumber-0.8.5
Successfully installed cucumber-rails-0.3.2
7 gems installed
Installing ri documentation for trollop-1.16.2...
Installing ri documentation for gherkin-2.1.5...
Installing ri documentation for term-ansicolor-1.0.5...
Installing ri documentation for diff-lcs-1.1.2...
Installing ri documentation for json_pure-1.4.6...
Installing ri documentation for cucumber-0.8.5...
Installing ri documentation for cucumber-rails-0.3.2...
Installing RDoc documentation for trollop-1.16.2...
Installing RDoc documentation for gherkin-2.1.5...
Installing RDoc documentation for term-ansicolor-1.0.5...
Installing RDoc documentation for diff-lcs-1.1.2...
Installing RDoc documentation for json_pure-1.4.6...
Installing RDoc documentation for cucumber-0.8.5...
Installing RDoc documentation for cucumber-rails-0.3.2...

Rspecrspec-railsを指定してインストール

masatoshi@ubuntu:~$ gem install rspec-rails
**************************************************

  Thank you for installing rspec-1.3.0

  Please be sure to read History.rdoc and Upgrade.rdoc
  for useful information about this release.

**************************************************
**************************************************

  Thank you for installing rspec-rails-1.3.2

  If you are upgrading, do this in each of your rails apps
  that you want to upgrade:

    $ ruby script/generate rspec

  Please be sure to read History.rdoc and Upgrade.rdoc
  for useful information about this release.

**************************************************
Successfully installed rspec-1.3.0
Successfully installed rspec-rails-1.3.2
2 gems installed
Installing ri documentation for rspec-1.3.0...
Installing ri documentation for rspec-rails-1.3.2...
Installing RDoc documentation for rspec-1.3.0...
Installing RDoc documentation for rspec-rails-1.3.2...

2010-08-21

Rails3で自分専用のブログを作る(10)ー Ruby 1.9.2 p0 にアップグレード

Ruby 1.9.2 の正式リリース(p0)があったので、開発環境をrc2からp0にアップグレードしました。

404 Not Found を参考にrvmを使ってアップグレードします。

(1)rvm自体のアップデート

rvmが最新のバージョン、パッチレベルの情報を持っているので、まずrvmをアップデートします。このためにはgithub.comから最新のrvm情報を取得する必要がありますので、git-coreがインストールされている必要があります。今回はインストール済ですね。

$ rvm update --head

(2)rvmのリロード

アップデートした情報を反映させるためには、rvmのシェルスクリプトのリロードが必要です。

$ rvm reload

(3)rvmが知っているrubyの確認

リロードの結果、最新版のruby情報が保持されているかどうかを確認します。

$ rvm list known

(4)ruby 1.9.2 p0 のインストール

ruby 1.9.2 p0 のソースをダウンロードしてコンパイルします。rvmのインストールコマンドを実行するだけです。

$ rvm install 1.9.2

(5)インストールgem のコピー

ruby 1.9.2 rc2 にインストールした gem を、1.9.2 p0 の環境にコピーします。

$ rvm gemset copy 1.9.2-rc2 1.9.2-p0

(6)デフォルトRubyの切り替え

ruby 1.9.2 p0 のインストールで、1.9.2 は p0 を指すように更新されていますが、rvmコマンドで明示的に切り替えないと、rc2 のままです。手動でデフォルトのRubyを1.9.2 p0 に切り替えます。

$ rvm use 1.9.2 --default

(7)コピーしたgemの確認

インストール済のgemを確認しておきましょう。

$ gem list

Rails3で自分専用のブログを作る(9)ー github.comにリポジトリを登録

今回のプログラムは公開するつもりなので、github.comにリポジトリを登録しました。

すでにアカウントとssh-keyは登録してあるので、Webから登録します。DIY Blogとしておきました。

あとの作業は no title を参考にしました。

まず、Ubuntuでユーザー名とメールアドレスを登録します。

$ git config --global user.name "Masatoshi Itagaki"
$ git config --global user.email "xxxxxxxx@xxxxx.xx"

つぎに、リポジトリ用のディレクトリを作成し、リポジトリを作成しリモートリポジトリを登録します。

$ mkdir DIY-Blog
$ cd DIY-Blog
$ git init
$ touch README
$ git add README
$ git commit -m "first commit"
$ git remote add origin git@github.com:masa-ita/DIY-Blog.git
$ git push origin master