heroku 提供的免费数据库是5M postgres,有点小。在Heroku的addons里面发现了两个mogodb的数据库 MongoLab和MongoHQ
MongoLab的免费版240MB,声明只用于开发和测试。先不管那么多,直接添加MongoLab插件,结果发现账户要验证才可添加,验证账户必须要提供信用卡信息。暂时不想提供信用卡,找到一个办法,就是自己到MongoLab网站上自己申请一个账户再创建数据库。
在MongoLab上设置好数据库以后。
先在本地调试一下,使用mongoid 3.x,修改Gemfile:
gem "mongoid", "~> 3.0.3" gem "mongoid_rails_migrations", "~> 0.0.14" gem 'mongoid_auto_increment_id', "0.5.0" gem 'bson_ext'
然后执行:bundle install --without production
接着修改config/mongoid.xml的配置如下:
defaults: &defaults options: identity_map_enabled: true development: <<: *defaults sessions: default: uri: mongodb://user:[email protected]:37067/my_db options: skip_version_check: true safe: true
本地测试ok,然后我们先设定一下heroku的环境变量,命令如下:
heroku config:set Q_MONGOLAB_URI=mongodb://user:[email protected]/my_db
然后config/mongoid.xml里添加:
production: <<: *defaults sessions: default: uri: <%= ENV['Q_MONGOLAB_URI'] %> options: skip_version_check: true safe: true
这样做的目的是不再配置文件中暴露数据库的信息,而把数据库信息放到环境变量中。相对安全一些。
然后push到heroku, 结果执行出错,查看 heroku logs报错也很简单:NoMethodError: undefined method `[]' for nil:NilClass。
到mongoid.org上找到这个http://mongoid.org/en/mongoid/docs/tips.html#ruby。发现heroku默认的ruby是1.9.1 .需要在Gemfile指定为ruby 1.9.3.
修改Gemfile
ruby '1.9.3'
不过bundle版本得是1.2.0rc以上,所以先执行 gem install bundler --pre,这样本地bundle instal才能执行。
最后push到heroku,成功运行了。
另一个MongoHQ我还没有试过,应该也可以这样使用,因为mongohq.com也是可以免费注册并创建免费数据库的。