iTimothy

搭建Rails+Mongoid+MongoDB环境

之前做那个Vim-Tips.com是基于Rails+MySQL的,部署在我的DigitalOcean的VPS上。随着近来NoSQL来势汹汹,我也想顺便练手一下MongoDB,所以,打算把Vim-Tips.com的后端数据库从MySQL移植到MongoDB来。和Active Record一样,基于MongoDB也有个比较不错的ORM框架,叫做Mongoid。照着官网的教程,在Nitrous.IO上先练手搭建了一下环境,过程还比较顺利,这里小记一下,当作备忘。之后有时间,就打算正式着手把VimTips.com迁移到MongoDB。

安装MongoDB

安装MongoDB的方式很多,这里不介绍了。

###添加Gem

按照官方文档的指引,首先得安装Mongoid和它所依赖的gem。在rails项目中的Gemfile中,添加gem:

1
2
gem 'mongoid', '~>3.0.0'
gem "bson_ext"

添加完毕,直接bundle install安装

生成Mongoid的配置文件

Mongoid安装好后,可以生成Mongoid的配置文件,配置文件是YAML格式的。通过rails命令可以直接生成:

1
rails g mongoid:config

生成好的配置文件,放在项目的目录:./config/mongoid.yml
接下来就是修改配置文件了,一个简单的配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
development:
# Configure available database sessions. (required)
sessions:
# Defines the default session. (required)
default:
# Defines the name of the default database that Mongoid can connect to.
# (required).
database: vimtips
# Provides the hosts the default session can connect to. Must be an array
# of host:port pairs. (required)
hosts:
- localhost:27017
username: dbuser
password: 'your_password'

由于是连接本机,所以MongoDB的地址就指向本机了,另外,默认安装的MongoDB是没有密码的,可以随意访问。为了安全性起见,记得设置成需要用户名和密码访问的认证方式。

修改rails项目配置

我们已经装好了MongoDB,也给rails项目装好了mongoid的gem,搞完了配置文件,最后的一步,就是修改rails项目配置,让它能够通过mongoid访问MongoDB了。对于已经创建好的rails项目,默认是通过Active Record组件的,我们需要让它切换到Mongoid组件。

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

接下来,我们还需要做一些小改动,打开./config/application.rb,在文件开头的地方,去掉 require “rails/all”,然后加入下面几行:

1
2
3
4
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"

对于rails 3.2以上版本,你还需要编辑文件./config/environments/development.rb,注释掉如下几行:

1
2
#config.active_record.mass_assignment_sanitizer = :strict
#config.active_record.auto_explain_threshold_in_seconds = 0.5

如果你的rails版本是3.2.3及以上,还需要在./config/application.rb注释掉下面一行:

1
# config.active_record.whitelist_attributes = true

以上的改动,都是针对现有已经创建的rails项目进行的,如果你想新建一个项目来使用Mongoid,那就简单多了,直接在创建项目的时候,让rails项目不使用Active Record即可:

1
rails new my_application --skip-active-record

这样简单多了啊!

总算搞完了,测试Mongoid和MongoDB,可以直接用rails命令创建一脚手架,添加数据即可,不出意外的话,你的项目已经用上Mongoid+MongoDB了!

坚持原创技术分享,您的支持将鼓励我继续创作!