如何使用 Rails 4.2 中的 secrets.yml 将密钥传递给 mongoid.yml?
How do I pass secret keys into mongoid.yml using secrets.yml in Rails 4.2?
这是我第一次使用 Mongoid,在 test/local 服务器上一切正常,但在部署到 IBM Bluemix 时我遇到了瓶颈(不要问我为什么使用 Bluemix,我知道如果我使用 Figaro 部署到 Heroku 可能会更容易。)
我正在使用它的 uri 连接到 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 为 nil。
我知道这一点是因为我通过对 uri 进行硬编码进行了测试并且它有效。
我目前没有在我的 .gitignore 中包含 mongoid.yml,所以我想如果我可以插入 uri: <%= Rails.application.secrets.mongo_url %>,我应该是安全的。
我还尝试将 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。
提前致谢!!
Ruby 构建包覆盖了您拥有的 URL。您需要将 mongolab 或 mongodb 服务附加到您的应用程序。然后 buildpack 将自动为您连接到您的数据库中。
这是我第一次使用 Mongoid,在 test/local 服务器上一切正常,但在部署到 IBM Bluemix 时我遇到了瓶颈(不要问我为什么使用 Bluemix,我知道如果我使用 Figaro 部署到 Heroku 可能会更容易。)
我正在使用它的 uri 连接到 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 为 nil。 我知道这一点是因为我通过对 uri 进行硬编码进行了测试并且它有效。
我目前没有在我的 .gitignore 中包含 mongoid.yml,所以我想如果我可以插入 uri: <%= Rails.application.secrets.mongo_url %>,我应该是安全的。
我还尝试将 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。
提前致谢!!
Ruby 构建包覆盖了您拥有的 URL。您需要将 mongolab 或 mongodb 服务附加到您的应用程序。然后 buildpack 将自动为您连接到您的数据库中。