如何在Rails 4.2中使用secrets.yml将密钥传递给mongoid.yml?

时间:2015-07-07 21:33:03

标签: ruby-on-rails-4 mongoid ibm-cloud mlab mongoid4

这是我第一次使用Mongoid,一切都在测试/本地服务器上工作正常,但是在部署到IBM Bluemix时我遇到了障碍(不要问我为什么使用Bluemix,我知道它可能是如果我使用费加罗部署到Heroku,会更容易。)

我正在使用它来连接MongoLab。

在我的scerets.yml:

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  mongo_url: "mongodb://IbmCloud_xxxxxx_xxxxxx:xxxxxx@dsxxxxxx.mongolab.com:xxxxxx/IbmCloud_xxxxxx_xxxxxx"

在我的mongoid.yml

production: 
sessions:
    default:
        # The standard MongoDB connection URI allows for easy replica set connection setup. 
        # Use environment variables or a config file to keep your credentials safe.
        uri: <%= Rails.application.secrets.mongo_url %>

当我部署应用程序时,暂存失败,因为uri为零。 我知道这一点,因为我通过对uri进行硬编码来测试它的确有效。

我目前在我的.gitignore中不包含mongoid.yml,所以如果我可以插入uri:&lt;%= Rails.application.secrets.mongo_url%&gt;,我应该是安全的。

我也尝试将uri硬编码到mongoid.yml并将其包含在gitignore中,但它给了我一些其他的错误,我想知道哪种方法更好。

以下是我收到的错误消息:

2015-07-07T17:29:53.01-0400 [STG/0]      OUT        rake aborted!
2015-07-07T17:29:53.01-0400 [STG/0]      OUT        NoMethodError: undefined method `match' for nil:NilClass
2015-07-07T17:29:53.01-0400 [STG/0]      OUT        /tmp/staged/app/vendor/bundle/ruby/2.2.0/gems/mongoid-4.0.2/lib/mongoid/sessions/mongo_uri.rb:49:in `initialize'
2015-07-07T17:29:53.01-0400 [STG/0]      OUT        /tmp/staged/app/vendor/bundle/ruby/2.2.0/gems/mongoid-4.0.2/lib/mongoid/sessions/factory.rb:106:in `new'
2015-07-07T17:29:53.01-0400 [STG/0]      OUT        /tmp/staged/app/vendor/bundle/ruby/2.2.0/gems/mongoid-4.0.2/lib/mongoid/sessions/factory.rb:106:in `parse'
2015-07-07T17:29:53.01-0400 [STG/0]      OUT        /tmp/staged/app/vendor/bundle/ruby/2.2.0/gems/mongoid-4.0.2/lib/mongoid/sessions/factory.rb:62:in `create_session'

同样,这是因为secrets.yml中设置的uri在mongoid.yml中显示为nil。

提前致谢!!

1 个答案:

答案 0 :(得分:0)

Ruby buildpack覆盖了您拥有的URL。您需要将mongolab或mongodb服务附加到您的应用程序。然后buildpack将为您自动连接数据库。