搭建Mac + Rails + Mongodb + Rspec开发环境
鉴于要做极客的任意门
这东东,这里简单记录下一个最基本的开发环境的搭建,以及注意事项,供大家参考。
环境为Mac + Ruby 1.9.3 + Rails 3.2.1 + Mongodb + Rspec,重写以前的项目,这次就都用最新版本的好了。
一、Mongodb
安装不多,官网很详细,推荐homebrew。若使用homebrew安装,安装完之后记得看info,里面有让mongodb默认daemon启动方法以及开机启动的代码,复制粘贴即可。
开启mongod进程后就可以使用mongodb连接该服务端了,并且可以在http://localhost:28017中看到简单的mongod控制面板(mongod的监听端口默认是27017,控制面板端口为该端口号加1000),这样mongodb就算好了
二、rvm
这个没什么好说的,一定要用的的,安装不说了,说下之后的使用:
$ mkdir rails_3.2.1_project
$ cd rails_3.2.1_project
$ mate .rvmrc # add rvm use 1.9.3@project_name --create
这样在这个目录下都是用ruby 1.9.3,然后有自己的gemset,下面在目录下:
$ gem install rails # 在project_name这个gemset下安装最新版rails,目前是3.2.1。这样就可以在此目录下生成最新的rails项目了
$ rails new app -T -O# -T 表示不生成/test目录,-O表示不生成active_record相关内容
ruby-china的wiki里有一个实用指南,值得一看
三、Gemfile
之后再Gemfile中加入:
gem "mongoid", "2.4.3" # Mongodb的ODM,类似ActiveRecord
gem "bson_ext", "1.5.2" # Mongodb的bson格式扩展,能很大的提高效率,因为用C写的
group :development, :test do
gem 'rspec-rails'
gem 'guard' # guard用来自动化测试,自动刷新浏览器
gem 'guard-rspec'
gem 'guard-livereload'
end
并删除:
# gem 'sqlite3'
然后:
$ bundle install
四、删除Active_Record内容
若创建项目时没有加上-O,则可以如下操作来消除active_record依赖:
删除config/database.yml
编辑config/application.rb,不加载active_record
# require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"
编辑config/enviroments/development.rb,注释掉如下两行active_record相关代码
# Raise exception on mass assignment protection for Active Record models
# config.active_record.mass_assignment_sanitizer = :strict
# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
# config.active_record.auto_explain_threshold_in_seconds = 0.5
编辑config/enviroments/test.rb,注释该行
# Raise exception on mass assignment protection for Active Record models
# config.active_record.mass_assignment_sanitizer = :strict
五、config
在rails项目目录下:
$ rails generate mongoid:config # 默认配置就可用了
$ rails generate rspec:install
$ rails s # 启动webrick
大概就这么多,希望你能不出问题。
好吧,其实配置rails不出问题往往是困难的,但是记得看log,以及一次又一次在水深火热之时帮助我们的Google算法(是Google算法,不是Baidu短发,rails的问题往往Google能解决而Baidu不行)。