为啥我的 mongoDB 托管 mongoid.yml 的 uri 设置无法正常工作?

Posted

技术标签:

【中文标题】为啥我的 mongoDB 托管 mongoid.yml 的 uri 设置无法正常工作?【英文标题】:Why is my mongoDB hosting uri settings for mongoid.yml not working correctly?为什么我的 mongoDB 托管 mongoid.yml 的 uri 设置无法正常工作? 【发布时间】:2012-06-28 06:46:58 【问题描述】:

我目前在我的 mongoid.yml 中使用以下设置(不起作用),并且我已将 MONGOLAB_URI 环境变量正确添加到我的 heroku 环境中:

production:
  sessions:
    default:
      another:
        uri: <%= ENV['MONGOLAB_URI'] %>

我还尝试了以下不起作用

production:
  uri: <%= ENV['MONGOLAB_URI'] %>

这也不起作用

production:
  sessions:
    default:
      uri: <%= ENV['MONGOLAB_URI'] %>

我在 heroku 推送中收到以下错误:

Running: rake assets:precompile
       There is a configuration error with the current mongoid.yml.
       Problem:
       No database provided for session configuration: :default.
       Summary:
       Each session configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: "another"=>"uri"=>nil.
       Resolution:
       If configuring via a mongoid.yml, ensure that within your :default section a :database value for the session's default database is defined.
       Example:
       \_\_development:
       \_\_\_\_sessions:
       \_\_\_\_\_\_default:
       \_\_\_\_\_\_\_\_database: my_app_db
       \_\_\_\_\_\_\_\_hosts:
       \_\_\_\_\_\_\_\_\_\_- localhost:27017
       There is a configuration error with the current mongoid.yml.
       Problem:
       No database provided for session configuration: :default.
       Summary:
       Each session configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: "another"=>"uri"=>nil.
       Resolution:
       If configuring via a mongoid.yml, ensure that within your :default section a :database value for the session's default database is defined.
       Example:
       \_\_development:
       \_\_\_\_sessions:
       \_\_\_\_\_\_default:
       \_\_\_\_\_\_\_\_database: my_app_db
       \_\_\_\_\_\_\_\_hosts:
       \_\_\_\_\_\_\_\_\_\_- localhost:27017
       Asset precompilation completed (15.47s)

我在这里做错了什么?我已按照 mongoid.org 的说明进行操作:

http://mongoid.org/en/mongoid/docs/installation.html

我正在使用 mongoid 3.0.0.rc

【问题讨论】:

【参考方案1】:

试试这个

ENV['MONGOLAB_URI'] = ds053681.mongolab.com:97321

production:
  sessions:
    default:
      hosts: 
        - <%= ENV['MONGOLAB_URI'] %>
      database: testapp_production
      username: testappuser
      password: testpassword

【讨论】:

ENV['MONGOLAB_URI'] 的值是多少? 出于安全考虑,我更改了一些项目,但看起来是这样的:mongodb://testappuser:testpassword@ds053681.mongolab.com:97321/testapp_production 我在 mongoid 4 上使用 rails 4 并且设置对我有用,只需稍作改动。在 hosts: value 中,我直接从您在上面声明的 ENV 变量中粘贴了主机。请参阅此要点中的方式gist.github.com/cesc1989/30fc3035a404347bc48a 嗨,如果我需要将 2 个 env 组合在一起怎么办?就我而言,mongoid.yml 需要以 hostname:port 格式指定主机,我尝试了不同的组合无济于事 或放入 2分开 : 使用这个 : 冒号和端口变量之间没有空格【参考方案2】:

abhas 的例子对我不起作用。这就是最终奏效的方法:

production:   
  sessions:
    default:
      uri: <%= ENV['MONGOHQ_URI'] %>
      options:
        skip_version_check: true
        safe: true

【讨论】:

Heroku 的帮助页面告诉我们这样做,但它不起作用。 由于环境变量名称中的意外,从此答案中复制粘贴将不起作用。它应该是MONGOHQ_URI 而不是MONGOHQ_URL。除此之外,这就是在撰写本文时将 mongodb URI(例如 mongodb://user:password@host:port/db?params)传递给 mongoid 的工作方式。 我将MONGOHQ_URL 更改为MONGOHQ_URI。希望这是正确的。好久没用这个了【参考方案3】:

来自https://devcenter.heroku.com/articles/mongolab#mongoid-5

production:
  clients:
    default:
      uri: <%= ENV['MONGOLAB_URI'] %>

【讨论】:

以上是关于为啥我的 mongoDB 托管 mongoid.yml 的 uri 设置无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置我的 VPS Webmin/Virtualmin 服务器以在托管网站中显示来自 MongoDB 的数据?

如果我使用 Heroku 来托管我的 d.py 机器人,它可以在 mongodb 中写入并保存到我的数据库吗?

为啥我的 Github 托管站点响应 HTTP 302 而不是 200?

为啥我的托管 bean 中不能有静态公共字段?

为啥垃圾被添加到我的 mongodb 中?

为啥垃圾被添加到我的 mongodb 中?