Snake's Home

mongodb+rails

要维护一个项目,但是这个项目是rails+mongodb的,之前用惯了mysql,突然换成mongodb,不是很习惯,而且关于这块的资料好少。
自己折腾了下,总结过程如下:

安装

1
Brew install mongodb

然后

1
which mongo

来找到mongo的安装路径
添加环境变量:

1
2
3
vi .bahs_profile
Export /usr/ocal/cellar/mongodb/3.0.7/bin:$PATH;
Source .bash_profile

然后启动mongo 服务:

1
mongod --config /usr/local/etc/mongod.conf

敲上mongo就可以操作数据库了

与rails结合

在Gemfile中添加:

1
2
source 'https://ruby.taobao.org'
gem "mongoid", "~> 4.0.0"

然后

1
bundle install

再执行:

1
rails g mongoid:config

将会出现:

1
This generates config/mongoid.yml

那么,之前那个默认的database.yml配置文件已经没用了,别舍不得,去./config目录里面随手删掉它吧!

修改config/application.rb文件,先删掉

1
require "rails/all"


1
config.active_record.raise_in_transactional_callbacks = true

这两行,再添加以下几行:

1
2
3
4
5
require "action_controller/railtie"
require "action_mailer/railtie"
# require "active_resource/railtie" # Comment this line for Rails 4.0+
require "rails/test_unit/railtie"
require "sprockets/railtie" # Uncomment this line for Rails 3.1+

修改config/environments/development.rb文件,将里面所有涉及到active_record的配置项都注释掉:

1
config.active_record.migration_error = :page_load

在config/initializers/目录下新建一个mongoid.rb文件,添加一行:

1
Mongoid.load!("config/mongoid.yml", :production)

使用

经过上面的配置,就可以开始使用了,现在请忘记rake db:migrate命令吧,需要添加修改字段只要修改对应的model文件即可。

1
2
3
4
5
class Person
include Mongoid::Document
field :first_name, type: String
field :last_name, type: String
end

就ok了

相关Gems

• 如果觉得mongode生成的objectid在url中显示不够美观的话,那么可以安装mongoid_auto_increment_id来生成自增的整数形id。

• 使用mongoid-rails可以防止query的注入

• 因为在替换成mongoid之后,默认的migratetion就已经不能用来了,所以可以用mongoid_rails_migrations来实现针对mongodb的数据迁移功能。

参考:
TY’s Blog
xiaozhou’s Blog