どうも、逆流性食道炎です。2月初めに胃痛で病院に行き、翌日の胃カメラで診断されました。ストレス社会に生きる皆様も、胃腸の健康には十二分にご留意ください。くれぐれも。くれぐれも。
薬物の効能によるものか症状はだいぶ緩和されているのですが、時には病める日もあります。そんな胃の状態を教えてくれるAPIをつくりました。
http://marutanm-stomach.heroku.com/condition
稚拙ですね。果たして、これから機能追加はなされるのでしょうか?
ぶっちゃけ私の胃の状態なんて誰も知ったことじゃないでしょうが、PadrinoとMongoDBを使った簡単すぎるチュートリアルとして、手順を追ってみます。URLでお分かりのように、最終的にはHerokuにデプロイします。
基本的には公式にあるチュートリアルの劣化版ですが、ActiveRecordではなくMongoDB、ORMにMongoidを使います。
ソースコードはmarutanm/marutanm-stomach · GitHubに置いてあります。
プロジェクト作成
% padrino gen project marutanm_stomach -d mongoid
PadrinoはSinatraベースではありますが、Railsライクな構成をとっており(Rails使ったことないけど知ったかぶり)コマンド一発で必要なファイルを生成してくれます。
上記は、marutanm_stomachという名前のMongoidを使ったプロジェクトを作るコマンドです。その他のオプションはPadrino公式ガイドを参照のほど。
% cd marutanm_stomach
% mkdir db
% mongod -dbpath ./db/
作成したプロジェクトのディレクトリに移動、DBの置き場所をつくってMongoDBを起動しておきます。
管理画面作成
% padrino gen admin --theme olive
プロジェクト管理用の画面を生成します。oliveは画面の配色、好みで選びました。他にも以下のような配色が用意されていて、プロジェクト内のadmin/viewsにあるlayouts/application.hamlおよびsessions/new.hamlのstylesheet_link_tagで指定されています。
% ls public/admin/stylesheets/themes/ amro bec-green default kathleene orange ruby bec blue djime-cerulean olive reidb-greenish warehouse
起動してみる
% padrino start
http://localhost:3000 にアクセスすると、おなじみSinatraの404画面がでます。無事に起動していますね。
http://localhost:3000/admin にアクセスすると管理画面のログインページも確認できます。
管理用アカウント作成
% padrino rake seed
管理画面ログインに使うメールアドレス、パスワードを聞かれるのでそれぞれ入力します。パスワードはちゃんと暗号化された状態でDBに保管されます。
Model作成
% padrino gen model stomach condition:string % padrino rake seed
上記コマンドでModelを生成します。コレクション名がstomach、唯一の要素がString型のconditionですね。ちなみにmongoコンソールから確認したところ、コレクション名は自動的に複数形のstomachesになりました。
# app/models/stomach.rb class Stomach include Mongoid::Document include Mongoid::Timestamps # adds created_at and updated_at fields field :condition, :type => String end
自動的にMongoidのtimestampモジュールを使うようになってます。便利ですねー
stomachモデルを管理画面に追加
% padrino gen admin_page stomach
これがPadrinoの便利なところ!(だと思っている)
上記コマンドを叩くだけで管理画面にタブが追加され、先ほど作成したstomachモデルのデータを管理画面から一覧/作成/編集できるようになります。
Stomachesタブからデータを一覧できるし
新規作成もできる。ここまでコード書いてないのに!
Controller作成
% padrino gen controller condition
stomachの最新1件のconditionを表示するよう、生成されたapp/controllers/condition.rb を編集しましょう。
# app/controllers/condition.rb MarutanmStomach.controllers :condition do get '/' do p Stomach.last.condition end end
動作確認
http://localhost:3000/condition にアクセス。
stomachが空っぽだと内部エラーになるので、あらかじめ管理画面からなにか入れておきましょう。エラー処理が面倒なのではなく、空腹時は気持ち悪くなってしまうという胃の調子を模した挙動です!!!
デプロイ準備
rakefile作成
require File.dirname(__FILE__) + '/config/boot.rb' require 'thor' require 'padrino-core/cli/rake' PadrinoTasks.init
db/seeds.rb
email = "marutanm@gmail.com" password = "admin"
最初のほうのshell.askになってるあたりを変更。ファイルに直書きはどうかと思ったんだけど、管理画面から変更すればいいわけで。
このあたりは公式にあるチュートリアルのまま。
MongoHQ接続設定
# config/database.rb #Mongoid.database = Mongo::Connection.new(host, port).db(database_name) Mongoid.configure do |config| if ENV['MONGOHQ_URL'] uri = URI.parse(ENV['MONGOHQ_URL']) conn = Mongo::Connection.from_uri(ENV['MONGOHQ_URL']) config.master = conn.db(uri.path.gsub(/^\//, '')) else config.master = Mongo::Connection.new(host, port).db(database_name) end end
Herokuの環境変数を参照するようにする。
git-commit
% git init
% git add .
% git commit -m 'something comment'
herokuにはgit-pushを使ってデプロイしますからね。
Heroku側の準備
% heroku create marutanm_stomach % heroku addons:add mongohq:free % heroku rake seed
herokuコマンドはgemでインストールしてありますよね?
mongohqを入れるのを忘れずに、管理画面ログインできるようにもしないと。
デプロイ、動作確認
% git push heroku master % heroku open
ブラウザから確認。Not Found表示になると思いますが、おもむろにURLにconditonを付加しましょう。
データが空っぽのときは例によってInternal Server Errorになるので、管理画面からデータを入れましょう。
ほら、胃の調子を表示してくれますね!
ロジックらしいロジックを記述することもなく、設定ファイルを少し書いたぐらいでできてしまいました。Padrinoのadmin-page機能すばらしいですね。高度に発達したSinatraはRailsと区別がつかなくなりそうです。そしてHerokuさまさまですよ、ホント。
関連、参考
Guides Blog Tutorial - Padrino Ruby Web Framework
Rails + Sinatra ≒ Padrino で遊ぼう! » 梨木を読む
- -
20100419追記
はてブの関連エントリでみつけました。丁寧だし、こっちのほうが所要時間短いし。
Padrino+MongoDB+Herokuを使って、5分でWikiアプリ作成する « blog.udzura.jp