欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

无信用卡在 Heroku 上使用 MongoLab

程序员文章站 2022-07-15 11:46:02
...

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:password@ds037067.mongolab.com:37067/my_db
      options:
        skip_version_check: true
        safe: true
 

 

本地测试ok,然后我们先设定一下heroku的环境变量,命令如下:

heroku config:set Q_MONGOLAB_URI=mongodb://user:password@ds037067.mongolab.com/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也是可以免费注册并创建免费数据库的。