Mongoidを使ってアプリケーションを作っていて、RSpecでテストした時にFactoryGirlでバリデーションエラーが無くならないという事がありました。
一時的にtestの環境ではヴァリデーションをスキップするという方法でしのいでいたのですが、実はspec_helperにDBのコレクションをbefore(:each)のタイミングでドロップするという設定が必要だという事でした。これを実行してみると、問題無くバリデーションエラーがとれました。mongoid-rspecのドキュメンテーションにもこんな事は書いていなかったと思うし、ドキュメントの読み方が悪いのでしょうか…。
http://adventuresincoding.com/2012/05/how-to-configure-cucumber-and-rspec-to-work-with-mongoid-30
database_clearnerのgemを導入したタイミングのどこかで自動でテストの時にデータベースのコレクションを削除してくれるスクリプトも導入されるのかと思ったらそんなことは無い様ですね…。
Showing posts with label MongoDB. Show all posts
Showing posts with label MongoDB. Show all posts
Saturday, 15 December 2012
Monday, 10 December 2012
ActiveRecord #count, #length, #size
データベースのクエリを使ってできる事はRubyで書かないのが一つのパフォーマンスを向上するキーになるのは当然ですが、勿論それにはデータベースのクエリやORMのコマンドを知らないといけないですね。
limit(num)などは明らかにORMっぽいコマンドなので分かりやすいのですが、最近になってようやくORM使用の際の#count, #length, #sizeの相違についての記事を読みました。結論でActiveRecordでは#countはSQLでCOUNTを出します。#lengthはSQLでは処理されないので、一度配列としてデータを取ってきてRubyとして配列の長さを数えます。#sizeについては、既に配列としてデータを取ってきているオブジェクトに対しては配列の長さを返し、まだクエリのProcで残っているものに対してはCOUNTを発効してくれる便利な関数です。
こういう事を知らないでいつの間にか無駄なデータ転送を強いるコマンドを闇雲に走らせている可能性は冷や汗ですね…。
ちなみに私が最近メインで使っているmongoidでも#countはMongoDBのcountを発効してくれ様です。
limit(num)などは明らかにORMっぽいコマンドなので分かりやすいのですが、最近になってようやくORM使用の際の#count, #length, #sizeの相違についての記事を読みました。結論でActiveRecordでは#countはSQLでCOUNTを出します。#lengthはSQLでは処理されないので、一度配列としてデータを取ってきてRubyとして配列の長さを数えます。#sizeについては、既に配列としてデータを取ってきているオブジェクトに対しては配列の長さを返し、まだクエリのProcで残っているものに対してはCOUNTを発効してくれる便利な関数です。
こういう事を知らないでいつの間にか無駄なデータ転送を強いるコマンドを闇雲に走らせている可能性は冷や汗ですね…。
ちなみに私が最近メインで使っているmongoidでも#countはMongoDBのcountを発効してくれ様です。
Saturday, 6 October 2012
mongoid/MongHQ/Heroku設定
mongoid(3.1.0)/MongHQ/Heroku設定で少しはまりました。
Herokuのドキュメント上ではmongoid.ymlのファイルは下のように設定するのがおすすめと書かれていました。
このまま設定しようとするとうまく動きません。調べてみるとこれはyamlファイルのインデントの問題でした。下記のようにインデントを直すとうまくDBが繋がりました。
Heroku の上のドキュメントは多分多くの人が参照するので、MongoHQにドキュメントを修正するようにお願いして修正するという解答が来たのですが、今日の時点ではまだ修正されていない様ですね…。まあみんな忙しいですからね…。
Herokuのドキュメント上ではmongoid.ymlのファイルは下のように設定するのがおすすめと書かれていました。
production:
sessions:
default:
uri: <%= ENV['MONGOHQ_URL'] %>
options:
skip_version_check: true
safe: true
このまま設定しようとするとうまく動きません。調べてみるとこれはyamlファイルのインデントの問題でした。下記のようにインデントを直すとうまくDBが繋がりました。
production:
sessions:
default:
uri: <%= ENV['MONGOHQ_URL'] %>
options:
skip_version_check: true
safe: true
Heroku の上のドキュメントは多分多くの人が参照するので、MongoHQにドキュメントを修正するようにお願いして修正するという解答が来たのですが、今日の時点ではまだ修正されていない様ですね…。まあみんな忙しいですからね…。
Wednesday, 20 June 2012
RoRとmongoidとRSpecでTDDことはじめ
RoRとmongoidとRSpecでテストを動かそうとしたところ、下のようなエラーメッセージが出ました。
undefined method `fixture_path=' for # (NoMethodError)
これに関してはすでに解決している人がいたので、ググって解決です。
Wednesday, 2 May 2012
MongoDBをRailsで使ってみました
HerokuでPostgreSQLを使用してアプリケーションを開発していたのですが、その柔軟性が少ないことでこれからPostgresSQLを用いて開発していくことに疑問を持ち、最近もっとも頻繁に耳にするKVSであるMongoDBの導入をしようとしています。
@masatomon さんのブログ記事を参考にしてRailsでMongoDBを使ってみました。
mongo_mapperの代わりにmongoidを使用したので、Gemfileなど書き換えたのですが、とても簡単にRailsとMongoDBを使用してアプリケーションが構築できる環境が作れました。
MongoDBのローカルマシンへのインストールもソースをダウンロードしてきて適当な場所にフォルダを移しパスを通して、あとはdb用のフォルダ(デフォルトで/data/db)を作成すれば使える簡単な操作です。
MongoDBサーバの起動は
$ mongod
インタラクティブコンソールの起動は
$ mongo
です。
MongoDBでスケーリングやアプリケーションの柔軟性はできそうですが、クエリを構築したりトランザクションを管理するなどはまた学び直しなので、面倒ですね…。
最近はひたすらビジネスモデルの構築、設計や技術の調査などをしていますが、早くプロダクションに取りかかりたいです…。
@masatomon さんのブログ記事を参考にしてRailsでMongoDBを使ってみました。
mongo_mapperの代わりにmongoidを使用したので、Gemfileなど書き換えたのですが、とても簡単にRailsとMongoDBを使用してアプリケーションが構築できる環境が作れました。
MongoDBのローカルマシンへのインストールもソースをダウンロードしてきて適当な場所にフォルダを移しパスを通して、あとはdb用のフォルダ(デフォルトで/data/db)を作成すれば使える簡単な操作です。
MongoDBサーバの起動は
$ mongod
インタラクティブコンソールの起動は
$ mongo
です。
MongoDBでスケーリングやアプリケーションの柔軟性はできそうですが、クエリを構築したりトランザクションを管理するなどはまた学び直しなので、面倒ですね…。
最近はひたすらビジネスモデルの構築、設計や技術の調査などをしていますが、早くプロダクションに取りかかりたいです…。
Subscribe to:
Posts (Atom)