読者です 読者をやめる 読者になる 読者になる

MOGOK最速レビュー

MOGOKクローズドβが始まったので、レビューをしてみんとてするなり。

MOGOK とは?

MOGOKは、Ruby on Railsアプリケーションの開発支援環境と実行環境を提供するサービスです。」端的に言えば「heroku みたいなの」です、IIJ がやってます。IIJ 自身による紹介は例えば「リソース管理とメッセージングの仕組みについての解説」など。

MOGOK 用アプリ

Rails の場合、いくつか heroku 向けアプリから修正すべき所があります。

config/environments/production.rb

チュートリアルの「Railsアプリケーションの作成」によると、以下のように書き足す必要があります。

  config.serve_static_assets = true
  config.logger = Logger.new(STDOUT)
  $stdout.sync = true
Gemfile

heroku からの書き換えという想定ですと、以下のような内容になります。

  • gem 'sqlite3' という行があったらコメントアウト
  • gem 'newrelic_rpm' など、heroku 用の gem もコメントアウト
  • gem 'therubyracer-heroku' は gem 'therubyracer' にする
  • gem 'pg' は Rails 2 ならば gem 'mysql' に、Rails 3 ならば gem 'mysql2' に変える必要があります。

本当にコメントアウトしてしまうと管理が煩雑になるので、わたしは以下のように hostname コマンドを実行してサーバーの名前を取得し、その内容によって分岐させました。
ローカルでは全て読み込むようにするのが正解な気がするんだけど、まぁそのうちそういう機能が bundler に入るでしょう。環境変数 BUNDLE_WITHOUT や Bundler.settings.without= を用いるとすっきり書くことができます。

if /\Amgk-/ =~ `hostname` # mogokのサーバ名は "mgk-" で始まる
  Bundler.settings.without = %w/development test heroku/
end

group :development do
  gem 'sqlite3'
  gem "therubyracer"
end

group :mogok do
  gem "therubyracer"
  gem 'mysql2'
end
group :heroku do
  gem 'therubyracer-heroku'
  gem 'pg'
  gem 'newrelic_rpm'
end

rake assets:precompile

Rails 3.1 にはまだ対応していないので、deploy 時に rake assets:precompile をサーバー側で自動的にやってくれたりはしません。また、手動でやっても後述のメモリサイズ制限で殺されます。よって、以下のように 2 コマンドに分けて手動実行する必要があります。

rake assets:precompile:all
rake assets:precompile:nondigest

deploy の仕方

以上を踏まえると、deploy のためのコマンドは以下のようになります。

git push mogok&&mogok deploy&&mogok rake assets:precompile:all&&mogok rake assets:precompile:nondigest

β版初期バージョンの制限

いくつかの文書化された制限と、まだ文書化されていない制限があります。IIJ MOGOKサービスβ版 ご利用の手引き」に制限が書かれています。大雑把には

  • 非同期ジョブの管理 (mogok worker) が未実装
  • 定期実行ジョブの管理 (mogok job) が未実装
  • サーバ上の環境変数の管理 (mogok env) が未実装
  • サーバ上でのRubyスクリプトの実行 (mogok run) が未実装
  • ssh 鍵のデータ長は 1024 バイトまで (ssh-dss 鍵が事実上登録できない)
  • 外部への通信ができない
  • プロセスのメモリサイズは 200MB まで (rake assets:precompile が通らない)

結論

動かそうと思っていた、RubyCI は HTTP で外に出れないと使えないので、出れるようになったら本気出す。