読者です 読者をやめる 読者になる 読者になる
スポンサーリンク

Heroku(ヘロク)で,Ruby on Railsアプリを簡単に公開する方法の入門 (無料のRuby向けPaaS環境の使い方)

クラウド Ruby on Rails Git ruby CMS

Heroku (ヘロク) とは,Ruby on RailsのWebアプリを簡単にデプロイできるPaaS

基本的に無料。 拡張機能を使う場合は,段階的に有料になる。



レンタルサーバやVPSを借りず,面倒な「環境構築」作業も一切なく

いま流行りの"クラウド"上で,非常に簡単にWebアプリを本番公開できるわけだ。

Heroku上では,Railsに限らず,Ruby製のアプリを汎用的に公開できる。


本稿は,この「Heroku」の使い方の入門。


ローカルのWindowsマシン上で,Ruby製のブログアプリ「Lokka」を構築し,

それをHeroku上にデプロイするまでの手順を解説する。

(※lokkaは,SinatraというRubyの軽量フレームワークで実装されている。)


作業は,全体で1時間もかからないだろう。

  • (1)Herokuの背景を知る
  • (2)Herokuにユーザ登録
  • (3)WindowsにRuby1.9+Gemをインストール
  • (4)WindowsにGit+Herokuツールをインストール
  • (5)Windows上でブログアプリを構築,動作確認
  • (6)Heroku上にアプリをデプロイ,動作確認
  • 補足情報
  • トラブルシューティング


※なお,ローカルPCのOSは Windows Vista を想定。

(1)Herokuの背景を知る


Ruby on Railsは,Webアプリを素早く開発するための,最善の選択肢の一つだ。


しかし今まで,Ruby on Railsには「デプロイが面倒」という問題があった。


Railsアプリを本番環境で本格的に運用するためには,

Linux上でApache+Passengerを導入するなどの環境構築作業が必要だった。

CentOS 5.6上で Apache+Passenger+Ruby on Rails 1.2 を動作させる手順 (仮想マシン上に,レガシーRailsの実運用環境を構築)
http://language-and-engineering.hatenablog.jp/entry/20110814/p1


が,もはやそれも過去の話となった。


今では,コマンド一発PaaS上にアプリをデプロイ可能。

※そのコマンド名を具体的に言うと,「git push」コマンドである。


本番の運用環境が,無料で手軽に手に入る。

それがHeroku。

HerokuでWebアプリ開発を始めるなら知っておきたいこと (3)デプロイが簡単
http://d.hatena.ne.jp/ruedap/20110501...

  • PHPのデプロイの簡単さと比較して、Rubyはデプロイが難しいという指摘に対して、まつもとさんはPHP並みに簡単にデプロイできるものとして「Heroku」を挙げています
  • Rubyのコードをレンサバにポイっと置いただけでWEBページ閲覧できるようになればPHPに大勝利できると思うんだよなー」→「それ、なんてHeroku?」(“Matz” こと、まつもとゆきひろ氏のretweet)


Herokuのサービス概要としては,下記のページが参考になる。

Rubyの開発者を「ヒーロー」にしたい、「Heroku」責任者が語る
米セールスフォース・ドットコムプラットフォーム部門シニア・バイス・プレジデント
http://itpro.nikkeibp.co.jp/article/I...
2011年3月時点での情報

  • サービス概要:
    • JavaのためのPaaSが「VMforce」で、RubyのためのPaaSが「Heroku」
    • サービス名のHeroku(ヘロク)は、「Hero(ヒーロー)」と「Hike(俳句)」の合成語。Herokuのミッションは、Rubyを使う開発者を「ヒーロー」にすること
  • サービス発展の流れ:
    • Herokuを始めたばかりの2008年頃は、単純なWebアプリケーションをターゲットにしていた。現在のHerokuは、何百万人も利用するような巨大アプリケーションや、複雑でパワフルなアプリケーションをホストしている
    • Web IDEは捨てて,アプリケーションプラットフォームの性能や管理性を向上するという使命に注力
  • 各種機能:
    • NoSQL機能のアドオンや,リリース管理,運用管理も可能
    • 拡張性:GUIツールから操作するだけで、処理能力を拡大したり縮小したりできる


最近,Heroku上ではサーバサイドJavaScriptの「node.js」も使えるようになった。

HerokuがNode.jsのサポートを開始
http://tech.a-listers.jp/2011/06/02/h...

  • 2011年6月時点での情報


HerokuでNode.jsとExpressを使ってHello worldする
http://d.hatena.ne.jp/ruedap/20110619...

ここでは,node.jsはひとまず置いといて,Rubyアプリのデプロイだけに取り組む。



ちなみに,2008年ごろのHerokuは「Web IDE」も付属していて,ブラウザ上から新規アプリを作れた。

しかし2011年現在はWeb IDEの機能(つまり,開発機能)は廃止されており,

純粋に「運用・デプロイ環境」としてのサービスになっている。

ブラウザで Ruby on Rails 開発! Heroku を使ってみよう
http://webos-goodies.jp/archives/5128...

  • 2008年2月の情報
  • このころは「Firefox 上で Ruby on Rails 統合開発環境を実現した Web アプリケーション」だった
  • 「開発ツールのインストールも必要なく、なんと 1 クリックで Rails アプリケーションが作成されてしまいました!この手軽さは革命的ですね。」

(2)Herokuにユーザ登録

まずはユーザ登録。


Herokuのサイトにアクセス。
https://heroku.com/

右下の「Sign Up」ボタンを押下。


メールアドレスを入力して,再度「Sign Up」ボタンを押下。

「Confirmation email sent. Check your inbox for the next step.」
と表示される。


登録したメアドに「Invitation to Heroku」という件名のメールが届く。

下記のような内容。

Heroku is a cloud application platform a new way of building and deploying web apps. Develop your app using your local tools, then deploy via Git. Follow the link to activate your account:

https://api.heroku.com/signup/accept/...

To learn more about deploying apps on Heroku, check out the docs:

http://devcenter.heroku.com/

Have fun, and don't hesitate to contact us with your feedback.

  • The Heroku Team

http://heroku.com/

このメールの,最初のリンクを押下。

アカウントがアクティベートされる。

「Welcome to Heroku / Enter a password and you'll be up and running right away.」
と表示される。

パスワードを入力して「Save」を押下。


「My Apps」という画面になる。

「Welcome to Heroku / Follow the Quickstart Guide to deploy your first app.」
とだけ表示されている。

公開中のアプリが一つもない,という意味。



これで,本番環境は整った。

次に必要なのは,ローカルの開発環境。


(3)WindowsにRuby1.9+Gemをインストール

もし,既にWindowsマシン上でRubyを使った開発環境が整っている場合,

ここの手順はスキップできる。



Ruby Installer を使って,Rubyをインストールする。

Rubyのバージョンが1.9以降であれば,RubyGemsも標準添付される。



Rubyのインスト―ラのダウンロードページを開く。
http://rubyinstaller.org/downloads/ar...

インストーラが列挙されている。


「Ruby Installers」の「Ruby 1.9.2-p180」のリンクを押下。

(※バージョンが1.9.2,パッチレベルが180である。)


rubyinstaller-1.9.2-p180.exe のダウンロードが完了。

実行。


Welcomeダイアログ上でNext。

ライセンスに同意してNext。

インストールフォルダを指定する(スペースを含むパスは禁止)。

「Add Ruby executables to your PATH」にチェック。

Installを押下。

フォルダが存在しますの警告ダイアログが出たら「Install Anyway」を選ぶ。


インストール完了。

Finishで終了。


コマンドプロンプトから動作確認。

c:\>ruby --version
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

c:\>gem --version
1.5.2


参考:

WindowsにRuby-1.9.2-p0とRuby on Rails 3をインストールする
http://gururan.com/20100914/205903

  • One-Click Ruby Installer for Windowsを使う


Rubyのパッケージマネジメントシステムgem(Rubygems)のコマンド一覧
http://ref.layer8.sh/ja/entry/show/id...

  • Gemの使い方


これで,ローカルPC上でRubyを使って開発するための環境が整った。


(4)WindowsにGit+Herokuツールをインストール

RubyアプリをHerokuにデプロイするためのツール類を入れる。



まずは,分散バージョン管理システムであるGitの導入。

下記ページ記載の手順「(1)Gitの導入」を実行。

Androidアプリで,Facebook APIを利用するための手順 (Facebook SDK for Androidの使い方)
http://language-and-engineering.hatenablog.jp/entry/20110830/p1

次に,Heroku関連のツールのインストール。

現状でHerokuツールがインストールされていないことを確認:

c:\>gem list

*** LOCAL GEMS ***

minitest (1.6.0)
rake (0.8.7)
rdoc (2.5.8)


リモートリポジトリからHerokuツールを落とせることを確認:
(-rはリモートリポジトリからの検索)

c:\>gem search -r heroku

*** REMOTE GEMS ***

〜〜
heroku (2.7.0)
〜〜


「bundler」というgem管理ツールも含めて,一気にインストール実行:

c:\>gem install heroku bundler

Fetching: term-ansicolor-1.0.6.gem (100%)
Fetching: mime-types-1.16.gem (100%)
Fetching: rest-client-1.6.7.gem (100%)
Fetching: addressable-2.2.6.gem (100%)
Fetching: launchy-2.0.5.gem (100%)
Fetching: rubyzip-0.9.4.gem (100%)
Fetching: heroku-2.7.0.gem (100%)
Successfully installed term-ansicolor-1.0.6
Successfully installed mime-types-1.16
Successfully installed rest-client-1.6.7
Successfully installed addressable-2.2.6
Successfully installed launchy-2.0.5
Successfully installed rubyzip-0.9.4
Successfully installed heroku-2.7.0
Fetching: bundler-1.0.18.gem (100%)
Successfully installed bundler-1.0.18
8 gems installed
Installing ri documentation for term-ansicolor-1.0.6...
Installing ri documentation for mime-types-1.16...
Installing ri documentation for rest-client-1.6.7...
Installing ri documentation for addressable-2.2.6...
Installing ri documentation for launchy-2.0.5...
Installing ri documentation for rubyzip-0.9.4...
Installing ri documentation for heroku-2.7.0...
Installing ri documentation for bundler-1.0.18...
Installing RDoc documentation for term-ansicolor-1.0.6...
Installing RDoc documentation for mime-types-1.16...
Installing RDoc documentation for rest-client-1.6.7...
Installing RDoc documentation for addressable-2.2.6...
Installing RDoc documentation for launchy-2.0.5...
Installing RDoc documentation for rubyzip-0.9.4...
Installing RDoc documentation for heroku-2.7.0...
Installing RDoc documentation for bundler-1.0.18...

参考:

Ruby on Rails 3.0 日記 / 第11回: Bundler
http://www.oiax.jp/rails/rails3/bundl...

  • Bundler は、Ruby アプリケーションが動作するのに必要な(アプリケーションが依存する) Gem パッケージの管理ツール


これで,ローカルマシン上のRubyアプリをHerokuに公開する準備が整った。

ここまでで「舞台」が全て整ったことになる。



あとは,中身。

さっそくアプリを作ろう。


(5)Windows上でブログアプリを構築,動作確認

楽に導入できるRubyのブログアプリ(CMS)「Lokka」を導入する。


どこか開発用のディレクトリに,heroku_lokkaみたいなフォルダを作成。

そこをカレントにして,下記のコマンドを実行:

D:\dev\ruby\heroku_lokka>git clone git://github.com/komagata/lokka.git

Cloning into lokka...
remote: Counting objects: 3372, done.
remote: Compressing objects: 100% (1469/1469), done.
remote: Total 3372 (delta 1908), reused 3182 (delta 1750)
Receiving objects: 100% (3372/3372), 3.85 MiB | 325 KiB/s, done.
Resolving deltas: 100% (1908/1908), done.


「lokka」フォルダが生成され,その中に必要物が一式入っている。

「README.ja.rdoc」が説明書なので,読んでみる。

Lokka

Rubyで書かれたクラウドの為のCMS

== 特徴

 * Windows, Mac, Linuxに加え、Google App Engine, Heroku等のクラウド環境でも動作します。

 * WordPressを参考にして、WordPressユーザーに分かりやすく作られています。

 * インストールが簡単。

・・・

この文面に続いて,Linux系OSの場合のインストール(ビルド)手順が書いてある。


しかし,Windowsの場合は,何もしなくてよい。

最初から「lokka.exe」があるので。


lokka.exeを実行。

下記のように表示される。

Show http://localhost:9292/
bundle exec rackup
DataObjects::URI.new with arguments is deprecated, use a Hash of URI components
(D:dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/dm-do-adapter-1.1.0/lib/dm-
do-adapter/adapter.rb:231:in `new')
[2011-09-14 22:10:02] INFO  WEBrick 1.3.1
[2011-09-14 22:10:02] INFO  ruby 1.9.2 (2011-02-18) [i386-mingw32]
[2011-09-14 22:10:02] INFO  WEBrick::HTTPServer#start: pid=2652 port=9292


下記のURLをブラウザで閲覧。
http://localhost:9292/


「Test Site - Test Post / Welcome to Lokka!」
と表示されれば,動作に成功している。



「Admin login」のリンクを押下。

ユーザ名とパスワードに,「test」「test」と入力してログイン。

管理画面が開く。

左サイドバーの「投稿/登録」を押下。

タイトルと本文に適当に入力し,登録ボタンを押下。

ブログに記事が登録される。


参考:

HerokuでWebアプリ開発を始めるなら知っておきたいこと (7)ブログならLokka
http://d.hatena.ne.jp/ruedap/20110505...

  • ブログを簡単に設置できるRuby純正クラウド用CMS「Lokka」
  • 「クラウド界のWordPressを目指す」


クラウド用CMS「Lokka」
http://moongift.jp/2010/10/201010231200/

  • LokkaはLinuxサーバはもちろんのこと、WindowsやMac OSXといったコンピュータ上で動作する。Windowsは実行バイナリを起動するだけの手軽さ。さらにHerokuやGoogle App Engineといったクラウドサービス上でも動作する


lokka-ja / ruby-1.9.2対応しました
https://groups.google.com/group/lokka...

  • ruby-1.9.2-p0対応


これで,Herokuに公開すべきアプリケーションが整った。


(6)Heroku上にアプリをデプロイ,動作確認

まず,HerokuとSSH通信するための準備をする。

公開鍵の生成のためには,Gitに付属してついてくるssh-keygenツールを利用する。


コマンドプロンプトを「管理者権限で実行」し,下記のコマンドを実行。

C:>cd /d C:\Users\(ユーザ名)\.ssh

C:\Users\(ユーザ名)\.ssh>"C:\Program Files\Git\bin\ssh-keygen" -t rsa -C "(Herokuに登録したメールアドレス)"

Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa): id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.pub.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
〜〜

この公開鍵をHerokuに認識させる。

C:\Users\(ユーザ名)\.ssh>heroku keys:add C:\Users\(ユーザ名)\.ssh\id_rsa.pub

Uploading ssh public key C:\Users\(ユーザ名)\.ssh\id_rsa.pub

これで,ローカルマシンとHerokuとの間で,セキュアな通信が可能になった。


次いで,前項でgit cloneの結果生成された「lokka」フォルダをカレントにする。

下記の4つのコマンドを実行。

C:\Users\(ユーザ名)\.ssh>cd /d D:\dev\ruby\heroku_lokka\lokka


D:\dev\ruby\heroku_lokka\lokka>heroku create

Enter your Heroku credentials.
Email: (Herokuに登録したメアド)
Password:(Herokuのパスワード)

Creating 〜〜... done, stack is bamboo-mri-1.9.2
http://〜〜.heroku.com/ | git@heroku.com:〜〜.git



D:\dev\ruby\heroku_lokka\lokka>git push heroku master

Enter passphrase for key '/c/Users/(ユーザ名)/.ssh/id_rsa':
Counting objects: 3345, done.
Compressing objects: 100% (1307/1307), done.
Writing objects: 100% (3345/3345), 3.85 MiB | 193 KiB/s, done.
Total 3345 (delta 1892), reused 3337 (delta 1886)

-----> Heroku receiving push
-----> Ruby/Rack app detected
-----> Gemfile detected, running Bundler version 1.0.7
       Unresolved dependencies detected; Installing...
       Using --without development:test
       Fetching source index for http://rubygems.org/
       Fetching git://github.com/komagata/dm-tags.git
       Fetching git://github.com/datamapper/dm-types.git
       Installing rake (0.8.7)
       Installing abstract (1.0.0)
       Installing activesupport (3.0.7)
       Installing addressable (2.2.6)
       Installing bcrypt-ruby (2.1.4) with native extensions
       Installing bond (0.4.1) with native extensions
       Installing builder (3.0.0)
       Installing data_objects (0.10.6)
       Installing dm-core (1.1.0)
       Installing dm-aggregates (1.1.0)
       Installing dm-do-adapter (1.1.0)
       Installing dm-is-searchable (1.1.0)
       Installing dm-is-tree (1.1.0)
       Installing dm-migrations (1.1.0)
       Installing do_mysql (0.10.6) with native extensions
       Installing dm-mysql-adapter (1.1.0)
       Installing dm-pager (1.1.0)
       Installing do_postgres (0.10.6) with native extensions
       Installing dm-postgres-adapter (1.1.0)
       Using dm-tags (1.1.1) from git://github.com/komagata/dm-tags.git (at mast
er)
       Installing dm-timestamps (1.1.0)
       Installing fastercsv (1.5.4)
       Installing json (1.5.3) with native extensions
       Installing multi_json (1.0.3)
       Installing stringex (1.2.2)
       Installing uuidtools (2.1.2)
       Using dm-types (1.1.1) from git://github.com/datamapper/dm-types.git (at
master)
       Installing dm-validations (1.1.0)
       Installing erubis (2.6.6)
       Installing haml (3.1.1)
       Installing i18n (0.5.0)
       Installing nokogiri (1.5.0) with native extensions
       Installing r18n-core (0.4.9)
       Installing rack (1.3.2)
       Installing rack-flash (0.1.1)
       Installing rack-test (0.6.0)
       Installing ripl (0.5.1)
       Installing ripl-multi_line (0.3.0)
       Installing ripl-rack (0.2.0)
       Installing sass (3.1.1)
       Installing tilt (1.3.2)
       Installing sinatra (1.2.3)
       Installing sinatra-content-for (0.2)
       Installing sinatra-r18n (0.4.9)
       Installing temple (0.2.0)
       Installing slim (0.9.2)
       Installing tux (0.3.0)
       Using bundler (1.0.7)
       Your bundle is complete! It was installed into ./.bundle/gems/
-----> Compiled slug size is 8.5MB
-----> Launching... done, v4
       http://〜〜.heroku.com deployed to Heroku

To git@heroku.com:〜〜.git
 * [new branch]      master -> master



D:\dev\ruby\heroku_lokka\lokka>heroku rake db:setup

(in /app)
Upgrading Database...
DataObjects::URI.new with arguments is deprecated, use a Hash of URI components
(/app/.bundle/gems/ruby/1.9.1/gems/dm-do-adapter-1.1.0/lib/dm-do-adapter/adapter
.rb:231:in `new')
Initializing Database...
DataObjects::URI.new with arguments is deprecated, use a Hash of URI components
(/app/.bundle/gems/ruby/1.9.1/gems/dm-do-adapter-1.1.0/lib/dm-do-adapter/adapter
.rb:231:in `new')
〜(SQL)〜

これで,Herokuへのデプロイが完了した。

※heroku create時に現れる「bamboo-mri-1.9.2」というのは,Heroku上のRubyのバージョンのこと。

Herokuで使用するRubyのバージョンを変更するAdd Star
http://d.hatena.ne.jp/ruedap/20110511...

  • Herokuは、2011年6月1日からRubyのバージョン1.9.2がデフォルトになる

下記のコマンドで,デプロイ済みのページを開くことができる。

D:\dev\ruby\heroku_lokka\lokka>heroku open
Opening http://〜〜.heroku.com/

Windows上での動作確認結果と同じく,「Test Site」と表示されていれば,成功。

既に,そのアプリケーションはPaaS上で世界中に公開されている。



すぐにadminのパスワードを変えよう。

test/testでログインし,左サイドバーの「ユーザー」>一覧>test

を押下。

E-mailに適当な値を入れて,パスワードを変更。

これで一安心。



この状態で,Herokuの管理画面を見てみよう。
https://api.heroku.com/myapps


デプロイしたばかりのアプリが「My Apps」の中にあるはずだ。

General Infoをクリックすると,アプリの詳細情報を閲覧できる。

  • Name
  • URL
  • 所有者のEメールアドレス
  • Gitリポジトリ情報,ファイルサイズ情報

もし「Destroy App」ボタンを押すと,

「Are you sure you want to permanently erase your code and data for〜〜?」

というアラートが表示される。

「OK」を押下すると,アプリはリポジトリごと消える。



My Appsから「Resources」を押下すると,各アプリが消費しているリソースを確認できる。

温度計のようなグラフに「Web Dyno 1」,

画面左上には「Dynos $0」と表示されているはずだ。



その画面の下の方を見ると,リソースを増やしたい場合の料金プラン表が並んでいる。

プラン名としては

  • Roni9n
  • Fugu
  • Ika
  • Zilla
  • Baku
  • Mecha

など,いかにも親日的なムードのあふれるサービスカタログとなっている。



※もしlokkaをHeroku上でRuby 1.9.2で動かしたい場合は,下記のページを参照。

lokkaをherokuのruby1.9.2で動かす
http://www.nilidea.com/11

  • heroku stack コマンドでruby1.9.2を指定する


Herokuの入門は,ここまで。



ここでは非Railsアプリをデプロイする方法を述べたが,

同様の方法でRailsアプリのデプロイもすぐにできる。基本的な手順は同じ。



Herokuに関する補足

今後,Heroku上でRailsで開発するために役立つと思われる参考URL。


今後役立ちそうな入門・チュートリアル:

Ruby版PaaSの"Heroku"で無料Railsホスティング環境を手に入れよう
http://kuranuki.sonicgarden.jp/2009/0...

  • ユーザ登録→ローカルでアプリ作成→gitでpushして公開,までの流れ


Herokuの環境をWindows上で構築してみる
http://ms2.seesaa.net/article/1719437...

  • Windows7上にRuby + Rails + Gitの環境構築をして,herokuコマンドでアプリ公開


本格的な連載でHerokuを詳しく紹介している記事:

HerokuでWebアプリ開発を始めるなら知っておきたい10のこと
http://d.hatena.ne.jp/ruedap/20110509...

  • 2011年5月時点での情報


Herokuで作るFacebookアプリ
http://gihyo.jp/dev/serial/01/heroku


公式ドキュメント:

Heroku Dev Center
http://devcenter.heroku.com/


有料版について:

クラウドプラットフォーム「Heroku」の活用 / 追加機能(有料)
http://thinkit.co.jp/story/2011/03/23...

  • 1dynoで処理しきれなくなると、dynoを拡張する必要があります。1ヶ月5dynoをフル(24時間31日)で利用した場合、$144(日本円換算で12,000円)程度
  • データベースを専用サーバーとして利用するプランの価格表


Dyno数の下げ忘れでクラウド破産
http://route477.net/d/?date=20101024

  • Dynoを増やしたら、元に戻すのを忘れずに…。






(以下は,作業中のトラブルに関する補足情報)



補足:lokkaとherokuに関するトラブルシュート

(トラブル1)DevKitを入れないままLokkaをビルドして動かそうとすると,「Please update your PATH to include build tools or download the DevKit」のエラーメッセージが出る。

lokka同梱のREADMEの指示にうっかり従ってしまい,

Windows上で頑張ってlokkaをビルドしようとすると,下記のような災難に見舞われる。

同じ轍を踏まないよう,ご注意を。


その際のエラーログ:

D:\dev\ruby\heroku_lokka\lokka>bundle install --without=production:test

Fetching git://github.com/datamapper/dm-types.git
remote: Counting objects: 2578, done.
remote: Compressing objects: 100% (1045/1045), done.
remote: Total 2578 (delta 1643), reused 2421 (delta 1501)Receiving objects:  78%
Receiving objects:  80% (2063/2578), 228.00 KiB | 181 KiB/s
Receiving objects: 100% (2578/2578), 329.78 KiB | 181 KiB/s, done.
Resolving deltas: 100% (1643/1643), done.
Fetching git://github.com/komagata/dm-tags.git
remote: Counting objects: 8413, done.
remote: Compressing objects: 100% (3039/3039), done.
remote: Total 8413 (delta 4727), reused 8396 (delta 4711)
Receiving objects: 100% (8413/8413), 1.16 MiB | 267 KiB/s, done.
Resolving deltas: 100% (4727/4727), done.
Fetching source index for http://rubygems.org/
Using rake (0.8.7)
Installing abstract (1.0.0)
Installing activesupport (3.0.7)
Using addressable (2.2.6)
Installing bcrypt-ruby (2.1.4)
Installing bond (0.4.1) D:/dev/ruby/Ruby192/lib/ruby/site_ruby/1.9.1/ruby
gems/defaults/operating_system.rb:9:in `block in <top (required)>': The 'bond' n
ative gem requires installed build tools. (Gem::InstallError)

Please update your PATH to include build tools or download the DevKit
from 'http://rubyinstaller.org/downloads' and follow the instructions
at 'http://github.com/oneclick/rubyinstaller/wiki/Development-Kit'
        from D:/dev/ruby/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/instal
ler.rb:141:in `call'
        from D:/dev/ruby/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/instal
ler.rb:141:in `block in install'
        from D:/dev/ruby/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/instal
ler.rb:140:in `each'
        from D:/dev/ruby/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/instal
ler.rb:140:in `install'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/source.rb:101:in `block in install'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/rubygems_integration.rb:78:in `preserve_paths'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/source.rb:91:in `install'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/installer.rb:58:in `block (2 levels) in run'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/rubygems_integration.rb:93:in `with_build_args'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/installer.rb:57:in `block in run'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/installer.rb:49:in `run'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/installer.rb:8:in `install'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/cli.rb:220:in `install'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/vendor/thor/task.rb:22:in `run'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/vendor/thor.rb:263:in `dispatch'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
lib/bundler/vendor/thor/base.rb:386:in `start'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.18/
bin/bundle:13:in `<top (required)>'
        from D:/dev/ruby/Ruby192/bin/bundle:19:in `load'
        from D:/dev/ruby/Ruby192/bin/bundle:19:in `<main>'

DevKitを入れれば正常にlokkaのインストールが完了する。

しかし次項のトラブルの通り,正常動作はしないので,やるだけ無駄になる。


(トラブル2)Windows上でlokka.exeを使わずに,自前でビルドしようとすると,実行時にエラーになる。

READMEに記載されている手順に従い,

Windowsローカルマシン上で,Lokkaの構築と動作確認を行なってみる。

最終的には動作に失敗するのだが,作業ログとして残しておく。



まずは,DevKitをインストールする。

下記のRuby Installers Downloadページを再度開く。
http://rubyinstaller.org/downloads/

「Development Kit」の「DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe」を押下。

ダウンロード。


開発用フォルダに「devkit」みたいなフォルダを作成。

DevKitのexeを実行し,解凍先としてそのフォルダを指定し,Extractを押下。

解凍が完了。


解凍先をカレントとして,下記のコマンドを実行。

D:\dev\ruby>cd devkit



D:\dev\ruby\devkit>ruby dk.rb init

[INFO] found RubyInstaller v1.9.2 at D:/dev/ruby/Ruby192

Initialization complete! Please review and modify the auto-generated
'config.yml' file to ensure it contains the root directories to all
of the installed Rubies you want enhanced by the DevKit.



D:\dev\ruby\devkit>ruby dk.rb review

Based upon the settings in the 'config.yml' file generated
from running 'ruby dk.rb init' and any of your customizations,
DevKit functionality will be injected into the following Rubies
when you run 'ruby dk.rb install'.

D:/dev/ruby/Ruby192



D:\dev\ruby\devkit>ruby dk.rb install

[INFO] Updating convenience notice gem override for 'D:/dev/ruby/Ruby192'

[INFO] Installing 'D:/dev/ruby/Ruby192/lib/ruby/site_ruby/devkit.rb'

これでDevKitのインストールが完了。

DevKitの動作確認。

c:\>gem install rdiscount --platform=ruby

Fetching: rdiscount-1.6.8.gem (100%)
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
Successfully installed rdiscount-1.6.8
1 gem installed
Installing ri documentation for rdiscount-1.6.8...
Installing RDoc documentation for rdiscount-1.6.8...



c:\>ruby -rubygems -e "require 'rdiscount'; puts RDiscount.new('**Hello RubyInstaller**').to_html"

<p><strong>Hello RubyInstaller</strong></p>

これでDevKitの導入が完了。


参考:

rubyinstaller Development Kit / Installation Instructions
https://github.com/oneclick/rubyinsta...

  • The DevKit is a toolkit that makes it easy to build and use native C/C++ extensions such as RDiscount and RedCloth for Ruby on Windows.


Ruby de android ハマったこと(gem install)
http://memoroid.seesaa.net/article/19...

次に,Lokkaのインストールディレクトリに移る。

下記のコマンドを実行。

D:\dev\ruby\heroku_lokka\lokka>bundle install --without=production:test

Fetching source index for http://rubygems.org/
Using rake (0.8.7)
Using abstract (1.0.0)
Using activesupport (3.0.7)
Using addressable (2.2.6)
Using bcrypt-ruby (2.1.4)
Installing bond (0.4.1) with native extensions
Installing builder (3.0.0)
Using bundler (1.0.18)
Installing data_objects (0.10.6)
Installing dm-core (1.1.0)
Installing dm-aggregates (1.1.0)
Installing dm-do-adapter (1.1.0)
Installing dm-is-searchable (1.1.0)
Installing dm-is-tree (1.1.0)
Installing dm-migrations (1.1.0)
Installing dm-pager (1.1.0)
Installing do_sqlite3 (0.10.6)
Installing dm-sqlite-adapter (1.1.0)
Using dm-tags (1.1.1) from git://github.com/komagata/dm-tags.git (at master)
Installing dm-timestamps (1.1.0)
Installing fastercsv (1.5.4)
Installing json (1.5.3) with native extensions
Installing multi_json (1.0.3)
Installing stringex (1.2.2)
Installing uuidtools (2.1.2)
Using dm-types (1.1.1) from git://github.com/datamapper/dm-types.git (at master)

Installing dm-validations (1.1.0)
Installing erubis (2.6.6)
Installing haml (3.1.1)
Installing i18n (0.5.0)
Installing nokogiri (1.5.0)
Installing r18n-core (0.4.9)
Installing rack (1.3.2)
Installing rack-flash (0.1.1)
Installing rack-test (0.6.0)
Installing ripl (0.5.1)
Installing ripl-multi_line (0.3.0)
Installing ripl-rack (0.2.0)
Installing sass (3.1.1)
Installing tilt (1.3.2)
Installing sinatra (1.2.3)
Installing sinatra-content-for (0.2)
Installing sinatra-r18n (0.4.9)
Installing temple (0.2.0)
Installing slim (0.9.2)
Installing tux (0.3.0)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem
is installed.



D:\dev\ruby\heroku_lokka\lokka>bundle exec rake db:setup

(in D:/dev/ruby/heroku_lokka/lokka)
Upgrading Database...
DataObjects::URI.new with arguments is deprecated, use a Hash of URI components
(D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/dm-do-adapter-1.1.0/lib/dm-
do-adapter/adapter.rb:231:in `new')
〜(SQL)〜



D:\dev\ruby\heroku_lokka\lokka>bundle exec ruby lokka.rb

DataObjects::URI.new with arguments is deprecated, use a Hash of URI components
(D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/dm-do-adapter-1.1.0/lib/dm-
do-adapter/adapter.rb:231:in `new')
== Sinatra/1.2.3 has taken the stage on 9646 for development with backup from WE
Brick
[2011-09-14 12:35:53] INFO  WEBrick 1.3.1
[2011-09-14 12:35:53] INFO  ruby 1.9.2 (2011-02-18) [i386-mingw32]
[2011-09-14 12:35:53] INFO  WEBrick::HTTPServer#start: pid=4404 port=9646

「ネットワーク接続がファイアウォールでブロックされています」

という警告ダイアログが出たら,「ブロックを解除する」を選択。


下記ページを閲覧。
http://localhost:9646/


ブラウザ上で,エラー画面が表示される。

Encoding::CompatibilityError at /
incompatible character encodings: UTF-8 and Windows-31J

file: layout.erb
location: concat
line: 36

これはRuby 1.9系を使っているために起こるエラー。

Lokkaでruby1.9.2で日本語を投稿するとエラー
http://help-me-hackers.com/tasks/181


Ruby1.9をこれから使う人のためのM17Nまとめ
http://d.hatena.ne.jp/xibbar/20090126...

  • Ruby1.9からは,StringのインスタンスがEncoding情報を持つようになりました
  • 違うエンコーディングは連結できません(Encoding::CompatibilityError: incompatible character encodings)

READMEを読んだだけでは分からないのだが,lokkaの公式サイトにはちゃんと

  • Ruby 1.8.7を使え
  • Windowsではlokka.exeを使え

と書いてある。なので,それで解決。

公式サイト:Getting Started / Windowsの場合
http://lokka.org/getting-started

(トラブル3)公開鍵を生成しないまま,gitのデプロイ作業を進めてしまうと,Permission Deniedのエラーになる。

その際のエラーログ:

D:\dev\ruby\heroku_lokka\lokka>heroku create

Enter your Heroku credentials.
Email: (Herokuに登録したメアド)
Password:(Herokuのパスワード)

Could not find an existing public key.
Would you like to generate one? [Yn] Y
Generating new SSH public key.
Uploading ssh public key C:\Users\(ユーザ名)/.ssh/id_rsa.pub
D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/lib/heroku/auth
.rb:187:in `read': No such file or directory - C:\Users\(ユーザ名)/.ssh/id_rsa.pub (E
rrno::ENOENT)
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/auth.rb:187:in `associate_key'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/auth.rb:160:in `associate_or_generate_ssh_key'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/auth.rb:147:in `check_for_associated_ssh_key'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/auth.rb:142:in `ask_for_and_save_credentials'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/auth.rb:71:in `get_credentials'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/auth.rb:51:in `user'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/auth.rb:11:in `client'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/command/base.rb:22:in `heroku'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/command/apps.rb:121:in `create'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/li
b/heroku/command.rb:114:in `run'
        from D:/dev/ruby/Ruby192/lib/ruby/gems/1.9.1/gems/heroku-2.7.0/bi
n/heroku:14:in `<top (required)>'
        from D:/dev/ruby/Ruby192/bin/heroku:19:in `load'
        from D:/dev/ruby/Ruby192/bin/heroku:19:in `<main>'


D:\dev\ruby\heroku_lokka\lokka>heroku create

Creating 〜〜... done, stack is bamboo-mri-1.9.2
http://〜〜.heroku.com/ | git@heroku.com:〜〜.git
Git remote heroku added

1度目は公開鍵の生成でこけているが,

2度目のコマンド実行では問題なく終了したように見える。


しかし,この状態で「git push heroku master」すると,

Permission deniedのエラーになってしまう。

Heroku で git push で Permission denied (publickey). のエラーが発生した。
http://d.hatena.ne.jp/u16s/20110528/1...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

ssh-keygenツールを使って,公開鍵を生成してやれば,この問題は起きなくなる。



関連する記事:

Ruby on Railsのバージョン間での違いのまとめ 一覧表(1系・2系・3系の差異と歴史)
http://language-and-engineering.hatenablog.jp/entry/20110913/p1


CentOS 5.6上で Apache+Passenger+Ruby on Rails 1.2 を動作させる手順 (仮想マシン上に,レガシーRailsの実運用環境を構築)
http://language-and-engineering.hatenablog.jp/entry/20110814/p1


Ruby on Railsのテストの書き方 (モデルの単体テストと,コントローラの機能テスト)
http://language-and-engineering.hatenablog.jp/entry/20091023/p1