mongolab にPythonからつっこんだデータを、Ruby on rails から参照しようと思いました。標準のActive Record と同じように扱えるよう、mongoid を使ってマッピングして使います。
######mongolab
mongolabは、mongoDB ホスティングサービスです。Daas(Database as a Service)です。500MB の容量まで無料で使えます。また、レコードした情報はウェブサイトから見ることが出来ます。
######MongoDB
MongoDBは、データベースです。MySQLやpostgreSQLと異なり、スキーマレスデータベースという分類のもので、先にどういうデータを入れるか?を定義しなくて良いものです。JSONのようなデータ構造を保存します。
######Mongoid
Rails 内でいつもどおりモデルを扱えるようにマッピングするGem。
##導入方法
既にプロジェクトは構築済みとして、モデルクラスの生成から説明します。
詳しくはこちら。バージョンは最新の5を説明しています。他のバージョンだと設定などが異なるのでご注意ください。
######準備
まずはgemの導入
gem 'mongoid', '~> 5.0.0'
bundle installしたあと、configファイルを作成します。
$ rails g mongoid:config
このままですと、rails g model
などのコマンドでmongoidが標準になっていますので、標準を戻したい場合は
config.generators do |g|
g.orm :active_record
end
とする。こうすれば、何も指定せずrails g
コマンドを実行すれば、通常通りactive record 用のファイルが生成されます。
mongolab用のモデルを生成したい場合は、rais g mongoid:model
などとプレフィックスを付けてください。
生成された config/mongoid.yml で、各環境ごとの設定を行います。
development:
clients:
default:
database: データベース名
hosts:
- ドメイン名:ポート番号
# The name of the user for authentication.
user: 'user'
# The password of the user for authentication.
password: 'password'
ドメイン名とポート番号は、mongolabのものを、データベース名はmongolabで作成したものを指定してください。また、上記のようにuser、passwordを入力。
######modelの生成
準備が終わったらモデルクラスを生成。ここで、model名は単数形にする。s
で終わるものを複数形と判断してしまうようなので、status
のばあいは、statu
と指定する。(回避方法はこちら参照)
$ rails g mongoid:model statu
すると、Mongoid::Document
をインクルードしたモデルが生成される。
class Statu
include Mongoid::Document
end
ここに、フィールドを設定していく。
class Statu
include Mongoid::Document
field :name, type: String
field :status, type: String
end
これで、model内などで
@status = Statu.all
として、viewで
<%= @status.first.name %>
などのコマンドを使えるようになります。