以前、HerokuにLokkaを入れてみる記事を書きました。
VirtualBox上のUbuntu12.04にLokkaを入れて、Herokuへデプロイしてみた - メモ的な思考的な
Lokkaについて調べていくと、Sinatraベースであるということを知りました。
次に、Sinatraについて調べていくと、SinatraベースのフレームワークPadrinoの存在を知りました。
Padrino で素敵なウェブ開発を - Padrino Ruby Web Framework
一方、Heroku以外でRubyを扱えるクラウドプラットフォームがないかを調べたところ、cloudControlがありました。
- cloudControl » Cloud App Platform » Supercharge development and scale applications in the Cloud.
- ずっと無料で使えるPaaS型クラウドのまとめ。2011年版 - Publickey
以前はPHPのみだったようですが、最近Rubyや他の言語にも対応したようです。また、Herokuとは異なり、フリーで使えるDBはMySQLでした。
CloudControl - Wikipedia, the free encyclopedia
そこで、それらをまとめて試したいと考え、Padrino+MySQL環境をcloudControlに構築してみることにしました。
開発環境
Padrinoは以下の構成でジェネレートしました(使っていないものもありますが...)。
オプション | 別名 | 値 |
adapter | -a | sqlite *1 |
orm | -d | activerecord |
test | -t | rspec |
script | -s | jquery |
renderer | -e | haml |
stylesheet | -c | sass |
cloucControlのアカウント作成
cloudControl » Cloud App Platform » Supercharge development and scale applications in the Cloud. の右上にある「Console Login」ボタンの中の「Register」リンクから、アカウントを作成します。
Padrinoのインストール
sudo gem install padrino
Padrinoのプロジェクトを作成
padrino g project
-a sqlite -d activerecord -t rspec -s jquery -e haml -c sass -b
development/test環境をSQLite、production環境をMySQLとするための修正
Gemfileの修正
Gemfileの「gem 'sqlite3'」という部分を修正します。
なお、ORMにActiveRecordを使用している関係上、MySQLのAdapterはMysql2となります。PadrinoのページにはMysql2の記載は見えませんでしたが、Mysql2でも問題なく動作しました。
参考:ActiveRecordとmysql2のバージョン問題 - tetsuwan blog
Gemfile
group :development, :test do gem 'sqlite3' end group :production do gem 'mysql2' end
config/database.rbの修正
ActiveRecord::Base.configurations[:production]の設定を、SQLite向けからMySQL向けへと変更します。
なお、MySQLの設定は、Add-Onsの「Credentials」の値をコピペするのではなく、環境変数を設定すれば良いようです(portは数字にしないとエラーとなるので、to_iメソッドで数字化します)。
参考:https://www.cloudcontrol.com/dev-center/Guides/Ruby/Databases
config/database.rb
ActiveRecord::Base.configurations[:production] = { adapter: 'mysql2', encoding: 'utf8', reconnect: true, pool: 5, database: ENV["MYSQLS_DATABASE"], username: ENV["MYSQLS_USERNAME"], password: ENV["MYSQLS_PASSWORD"], host: ENV["MYSQLS_HOSTNAME"], port: ENV["MYSQLS_PORT"].to_i } #ActiveRecord::Base.configurations[:production] = { # :adapter => 'sqlite3', # :database => Padrino.root('db', 'creative_aid_production.db') #}
Padrino + RSpecのIssueを修正するパッチ
Padrino 0.10.7でRSpecを使用している場合、「ar:migrate」を行うと、ローカル(development)環境では問題なく動作しますが、cloudControl(production)環境では以下のエラーとなります。
Connecting...
=> Executing Rake ar:migrate ...
/srv/www/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require': cannot load such file -- rspec/core/rake_task (LoadError)
from /srv/www/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `block in require'
そのため、以下を参考にして、spec/spec.rake にパッチします。
参考:https://github.com/padrino/padrino-framework/issues/514#issuecomment-8448872
spec/spec.rake
# 先頭行に追加 if ENV['PADRINO_ENV'] == 'test' # 最終行に追加 end
Gemfile.lockの作成
以上でGemfileなどの修正が完了したので、Gemfile.lockを作成します。
なお、MySQL関連のgemはローカル(development)環境では不要なため、「without」オプションを利用します。
cd ./
bundle install --without production
管理画面の作成
MySQLが使えるかどうかの確認のため、Blogチュートリアルにある管理画面作成の作業を行います。
Guides Blog Tutorial - Padrino Ruby Web Framework
padrino g admin
bundle install
padrino rake ar:migrate
padrino rake seed
動作確認
問題なく管理画面が作成されているかを確認するため、Padrinoを起動します。
padrino s
ちなみに、Padrinoを環境指定で起動するには、eオプションを付けます。
padrino s -e development
ポート3000で起動していると思いますので、ブラウザで以下にアクセスし、管理者画面が表示されるかを確認します。
Gitへコミット
無事、管理者画面を確認できた場合、cloudControlにデプロイするため、Gitにコミットしておきます。
git init
git add .
git commit -m 'first'
cloudControlの環境設定
公式ドキュメントを参考に、cloudControlの環境を設定します。
cloudControl » Cloud App Platform » Quickstart
ツールを準備します。
sudo easy_install pip
sudo pip install cctrl
2013/2/13 追記
Ubuntuで easy_install がない場合には、以下の方法でpipを入れることもできます。
sudo apt-get install python-pip
参考:UbuntuのPythonでeasy_installやpipを使いたい場合 - id:rx7(@namikawa)の技術メモ - 技術日記
2013/02/13 ここまで追記
Public Keyを作成します。
cctrluser key.add
cloudControlアプリの作成・MySQLsアドオンの追加・デプロイ
cloudControlアプリを作成します。
cctrlapp
create ruby
MySQLsアドオンの追加と、アドオンの確認をします。
cctrlapp
/default addon.add mysqls.free
cctrlapp/default addon
Gitの内容をPushしてデプロイします。
cctrlapp
/default push
cctrlapp/default deploy
DBのMigrate
デプロイ後でないとMigrateが行えないことに注意します。
なお、Padrinoのコマンドライン実行は、以下の公式ドキュメントにありました(Railsのものでしたが、Padrinoでも動作しました)。
cloudControl » Cloud App Platform » Guides
cctrlapp
/default run "padrino rake ar:migrate"
cctrlapp/default run "padrino rake seed"
ここまでにより、cloudControlでのデプロイは完了です。以下のURLにて動作を確認できます。
http://
使ってみての感想
- Herokuと同じような感覚でデプロイまでたどり着いた。
- *.cloudcontrolled.comドメインであれば、SSLも使うことができた。
- Herokuと同じように、いろいろなAdd-Onがあった。
- フリーなAdd-Onについては、クレジットカードが不要だった。
- フリーなAdd-Onに、Aliasが含まれていたので、独自ドメインの設定も行うことができる。
- deploy実行後、「Deploying...」のログを残したまま完了しないことが何回かあった。deploy時のエラーが原因なのか、cloudControl自体が原因なのか、分かりづらい。
- Deployingで止まったものは、いつまでも終わらないので、アプリ自体を廃棄して対応した。
- 公式ドキュメント以外では、cloudControl + Ruby の情報が少なめ。
デプロイ時のログについて少々不明瞭なところはありますが、個人的なものを手軽に使うにはちょうどよい環境なのかもしれません。