こんにちは、杉田です。 MOGOK では、本日より Sinatra や Padrino などの Rack アプリケーションも利用できるようになりました!今回の記事では、 Padrino 0.11.2 で作成されたアプリケーションのデプロイ方法をご紹介します。
なお、Ruby on Rails ベースでないアプリケーションはサポート対象外
となります。ご注意ください。
本記事では、2013/6/20 での Padrino の最新版である 0.11.2を使用したデプロイ手順を紹介します。 padrino は、 0.10.7 と 0.11.0 との間に特に多くの変更があります。この手順を試す方は、使用している Padrino のバージョンが 0.11.0 以上であることを確認してください。
$ padrino --version Padrino v. 0.11.2
それでは手順を開始しましょう。まずは Padrino を使用してアプリケーションを作成します。
$ padrino g project padxmpl -i -t rspec -d sequel -e erb
このコマンドとオプションは、次のような意味を持っています。
詳細は、Padrino 公式の Generator に関する説明を参照してください。
生成されたプロジェクトのディレクトリ内で bundle install を実行します。
$ cd padxmpl/ $ bundle install --path=.bundle/gems --binstubs=.bundle/bin
これだけで、もうサーバを動作させられるようになっています。
$ bundle exec padrino start => Padrino/0.11.2 has taken the stage development at http://127.0.0.1:3000 [2013-06-19 18:23:54] INFO WEBrick 1.3.1 [2013-06-19 18:23:54] INFO ruby 1.9.3 (2013-05-15) [x86_64-linux] [2013-06-19 18:23:54] INFO WEBrick::HTTPServer#start: pid=23377 port=3000
ただ、現時点ではコンテンツや route がひとつも存在していないため、ブラウザでアクセスしても Sinatra の Not Found 画面が表示されるだけです。
では続いて、コンテンツを作成してみましょう。
Padrino では、 Rails にあるような scaffold 機能はありません。代わりに Padrino では、 admin 画面を生成できます。今回は、この admin 画面を作ってみます。
$ bundle exec padrino g admin
大量のファイルが生成された様子が表示されます。
この更新で、Gemfile に ‘ruby-bcrypt’ gem が追加されているので、再度 bundle install を実行します。二回目なので、オプションは不要です。
$ bundle
続いて、名前 (string) と年齢 (integer) をプロパティとして持つ、 “user” というモデルを作成してみます。そして padrino generate admin_page で、このモデルを admin ページにも登録します。
$ bundle exec padrino g model user name:string age:integer $ rake db:migrate $ bundle exec padrino g admin_page user
これで生成されるファイルが出揃いましたので、 git init します。
$ git init $ git add . $ git rm -r --cached .bundle $ git commit -m "first commit"
今後 .bundle install 結果が git リポジトリで管理されないよう、 ‘.bundle/’ を .gitignore の末尾に追加しておきます。
.bundle/
以上で、ローカルで動作するアプリケーションが作成できました。
MOGOK は Rails 向けの環境ですので、Padrino を使用する際には、以下の二点についてアプリケーションに手を入れる必要があります。
MOGOK では、データベースへの接続情報は database.yml で提供されています。Padrino で生成されたアプリケーションは database.yml を読み込むようになっていないため、この部分を対応します。
config/database.rb を以下のように書き換えます。
Sequel::Model.plugin(:schema) Sequel::Model.raise_on_save_failure = false db_yml = Padrino.root("config", "database.yml") dbinfo = YAML.load(File.open(db_yml, 'r'){|fd| fd.read }) Sequel::Model.db = Sequel.connect(dbinfo[Padrino.env.to_s])
config/database.yml を、以下の内容で作成します。
test: adapter: sqlite database: db/test.sqlite3 pool: 5 timeout: 5000 development: adapter: sqlite database: db/development.sqlite3 pool: 5 timeout: 5000
また、 Gemfile に mysql2 gem の行を追加します。
gem 'mysql2'
Gemfile.lock を更新するため、 bundle install を実行します。
$ bundle
変更は忘れずに commit しておきます。
$ git add config/database.rb config/database.yml Gemfile Gemfile.lock $ git commit -m "use database.yml for database switching"
Padrino に初期データを投入する Rakeタスクでは、シェルのインタラクティブな操作が必要です。残念ながら MOGOKではこのような操作は行えないため、初期データは別の手段で渡す必要があります。
この記事では、初期ユーザ名・パスワードをファイルに直接書き込む方法を取ります。
db/seeds.rb を、二行だけ書き換えます。
# 変更前 email = shell.ask "Which email do you want use for logging into admin?" password = shell.ask "Tell me the password to use:"
# 変更後 email = "web-administrator@example.com" password = "initial password"
入力した内容は、Padrino の admin 画面ログイン時に利用される情報です。
ここでも、忘れずに変更を git に commit します。
$ git add db/seeds.rb $ git commit -m "change: seeds.rb use fixed user/pass"
なお、この手法ではファイルにユーザ名・パスワードが書かれることになるため、十分にセキュアな方法とは言えません。ログイン情報は初回ログイン時に必ず変更するようにしてください。
以上で準備は完了です。
$ bundle exec rake db:migrate $ bundle exec rake db:seed $ bundle exec padrino start
デフォルト状態では 3000 番ポートで動作します。 http://127.0.0.1:3000/admin にアクセスしてください。 ログイン画面が見えていれば成功です。
ここまで来れば、多くの Rails アプリケーションと同じように MOGOK を利用できます。
$ mogok create <アプリケーション名> $ git push mogok master $ mogok build $ mogok rake db:migrate $ mogok rake db:seed $ mogok start
mogok start したあとは、Padrino にアクセスしてみましょう。http://<アプリケーション名>.ruby.iijgio.com/admin/ にアクセスすると、ログイン画面が表示されます。
先ほどの db/seeds.rb に書いた情報でログインできます。
上のメニューに、先ほど追加した Users モデルが追加されています。この画面では、Users モデルの CRUD 操作が実行できます。
MOGOK にて Padrino アプリケーションが動作しました!
MOGOK で Ruby on Rails 以外の Rack アプリケーションが動作するようになったということで、Padrino のアプリケーションを動作させる方法をご紹介しました。いかがでしたでしょうか?
現在の MOGOK は基本的には Rails 向けの PaaS ですので、Padrino アプリケーションをMOGOK 向けにするためには若干の手順が必要でした。今回ご紹介した手順は Padrino のデプロイ方法ではありますが、Sinatra やその他 Rack アプリケーションを動かす際にもご参考になれば幸いです。
なお、現在 MOGOK では Ruby on Rails 以外のアプリケーションについてはサポート対象外となっております。そのため、Padrino をはじめとする Rack アプリケーションに関するご質問は、基本的にお答えいたしかねます。ご了承ください。
今後とも MOGOK をよろしくお願いいたします。