オープンソースのPaaSソフトウェア CloudFoundry の技術情報やイベント告知などを掲載します

2015-08-04

BikeBook を Cloud Foundry で動かす

「Cloud Foundry 百日行」第43日目、本日取り上げるアプリは、Ruby 製の自転車比較サイト BikeBook です。

自転車に限らず、家電製品、服や靴、スポーツ用品等、Web 上でそのようなモノが扱われている場合、同じ分野の製品間のスペック比較が簡単にできるとユーザにとっては嬉しいところです。BikeBook は Cloud Foundry に簡単にデプロイできるので、比較サイトを作りたい人は、以下の記事やこのアプリの UI 等が参考になるかもしれません。

基本情報

手順は以下の通りです。

  • 1) ソースコードの取得
  • 2) アプリのデプロイ
  • 3) 動作確認

1. ソースコードの取得

いつも通り、GitHub からソースコードをクローンします。

~$ git clone https://github.com/bikeindex/bikebook.git
~$ cd bikebook/
~/bikebook$ ls
assets  bike_data  boot.rb  config.ru  Gemfile  Gemfile.lock  lib  LICENSE  public  Rakefile  README.markdown  spec

2. アプリのデプロイ

まずはそのままプッシュしましょう。

~/bikebook$ cf push bikebook
Creating app bikebook in org ueno / space test1 as ueno...
 
:
 
Starting app bikebook in org ueno / space test1 as ueno...
-----> Downloaded app package (13M)
-------> Buildpack version 1.4.2
-----> Compiling Ruby/Rack
       Could not get translated url, exited with: DEPENDENCY_MISSING_IN_MANIFEST: https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/ruby-2.1.0.tgz
 !
 !     exit
 !
Staging failed: Buildpack compilation step failed
 
 
FAILED
BuildpackCompileFailed
 
TIP: use 'cf logs bikebook --recent' for more information

失敗しました。

上記ログによると、 Buildpack version 1.4.2 が適用され、そこで Ruby のコンパイルが始まりますが、 DEPENDENCY_MISSING_IN_MANIFEST: https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/ruby-2.1.0.tgz と出ています。つまり、Gemfile に登録されているこの Ruby v2.1.0 が、Ruby Buildpack v1.4.2 と相性が合っていない可能性があります。
Ruby Buildpack v1.4.2 について調べてみると、このバージョンの直近のリリースである v1.4.0 の リリース情報 に、Ruby のサポートバージョンが書かれてありました。それによると、MRI Ruby 2.1系の最新版は v2.1.6 となっています。

では、それを踏まえて、Gemfile を修正し、Ruby のバージョンを v2.1.0 から v2.1.6 に登録変更します。

~/bikebook$ vi Gemfile
~/bikebook$ git diff
diff --git a/Gemfile b/Gemfile
index 6689a81..e3ceb48 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,5 +1,5 @@
 source 'https://rubygems.org'
-ruby "2.1.0"
+ruby "2.1.6"
 
 gem 'rake'
 gem 'json'

:

再度プッシュします。

~/bikebook$ cf push bikebook
Creating app bikebook in org ueno / space test1 as ueno...

:

Starting app bikebook in org ueno / space test1 as ueno...
-----> Downloaded app package (13M)
-------> Buildpack version 1.4.2
-----> Compiling Ruby/Rack
-----> Using Ruby version: ruby-2.1.6
-----> Installing dependencies using 1.9.7
       Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
       Fetching gem metadata from https://rubygems.org/..........
       Fetching version metadata from https://rubygems.org/..

:

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: bikebook.10.244.0.34.xip.io
last uploaded: Tue Aug 4 01:15:28 UTC 2015
stack: cflinuxfs2
buildpack: Ruby

     state     since                    cpu    memory          disk      details   
#0   running   2015-08-04 10:16:09 AM   0.0%   69.6M of 256M   0 of 1G      

デプロイ成功しました。
1回目につまずいた Ruby のコンパイルのところで、今度は v2.1.6 が適用されて、処理されています。

3. 動作確認

ブラウザからアクセスしてみます。

“Choose manufacturer” をプルダウンすると、いろんなメーカーの名前が既に登録されています。その中から例えば “Fuji” を選ぶと、”Select model” のプルダウンが出現しました。
“Year” はデフォルトの “2014” のままにして、”Select model” から “Norcom Straight 1.1” を選ぶと、レースタイプのカッコいい自転車の写真とそのスペックが表示されました。

今度は、画面の上にある “Compare with another bike” をクリックし、同じ “Fuji” の2014年モデルから “Norcom Straight 2.5” を選んで、先ほどのモデルと比較してみます。

タイヤ、その他のパーツの違いが、写真とスペックの情報によって分かりますね。

まとめ

本日は、Ruby 製の自転車比較サイト BikeBook をデプロイしました。今回の最初にあったように、Buildpack や 使用言語のバージョンの違いによって、デプロイに引っかかることがあります。そのような時は、今回行ったように、ログを注意深く確認し、適合すると思われるバージョンを指定することで、デプロイが進むことがあります。

今回の自転車のデータですが、DB は使っていないので、ファイルとして、あらかじめソースコードに備わっています。 bike_data サブディレクトリ配下に例えば bike_data/fuji/2014/norcom_straight_1_1.json 等、メーカー、年で区切られ、JSON 形式のファイルとして納められています。データの修正、追加等はこれらのファイルを編集することで可能そうです。

今回使用したソフトウェア