Bg pageheader
  • MOGOK で Padrino を使用してみる

    投稿者: sugita | 投稿日:

    こんにちは、杉田です。 MOGOK では、本日より Sinatra や Padrino などの Rack アプリケーションも利用できるようになりました!今回の記事では、 Padrino 0.11.2 で作成されたアプリケーションのデプロイ方法をご紹介します。

    なお、Ruby on Rails ベースでないアプリケーションはサポート対象外となります。ご注意ください。

    Padrino のバージョンについて

    本記事では、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
    

    このコマンドとオプションは、次のような意味を持っています。

    • "padxmpl" という名前のプロジェクトを生成する
    • 最小限の構成でプロジェクトを生成する
    • テストフレームワークに rspec を使う
    • ORマッパ―に sequel を使う
    • テンプレートエンジンに 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 にデプロイする

    MOGOK は Rails 向けの環境ですので、Padrino を使用する際には、以下の二点についてアプリケーションに手を入れる必要があります。

    • DB環境を合わせる
    • db/seeds.rb の変更

    DB環境を合わせる

    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"
    

    db/seeds.rb を変更する

    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 にアクセスしてください。 ログイン画面が見えていれば成功です。

    padrino1

    MOGOK へデプロイする

    ここまで来れば、多くの 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 に書いた情報でログインできます。

    padrino2

    上のメニューに、先ほど追加した Users モデルが追加されています。この画面では、Users モデルの CRUD 操作が実行できます。

    padrino3

    MOGOK にて Padrino アプリケーションが動作しました!

    おわりに

    MOGOK で Ruby on Rails 以外の Rack アプリケーションが動作するようになったということで、Padrino のアプリケーションを動作させる方法をご紹介しました。いかがでしたでしょうか?

    現在の MOGOK は基本的には Rails 向けの PaaS ですので、Padrino アプリケーションをMOGOK 向けにするためには若干の手順が必要でした。今回ご紹介した手順は Padrino のデプロイ方法ではありますが、Sinatra やその他 Rack アプリケーションを動かす際にもご参考になれば幸いです。

    なお、現在 MOGOK では Ruby on Rails 以外のアプリケーションについてはサポート対象外となっております。そのため、Padrino をはじめとする Rack アプリケーションに関するご質問は、基本的にお答えいたしかねます。ご了承ください。

    今後とも MOGOK をよろしくお願いいたします。

    カテゴリ | タグ: MOGOK, Padrino
  • comments powered by Disqus