在Rails服务器上试验MongoID,并对如何/在何处设置环境变量感到困惑。
config/mongoid.yml
默认模板提供:
defaults: &defaults
host: localhost
...
# set these environment variables on your prod server
production:
host: <%= ENV['MONGOID_HOST'] %>
port: <%= ENV['MONGOID_PORT'] %>
username: <%= ENV['MONGOID_USERNAME'] %>
password: <%= ENV['MONGOID_PASSWORD'] %>
database: <%= ENV['MONGOID_DATABASE'] %>
我的问题是这些是在Rails中设置的吗?或者他们是在系统级别?如果是,那么在何处/如何设置,以便不需要登录任何用户帐户才能使它们有效?
答案 0 :(得分:14)
ENV散列将具有来自rails进程启动时系统环境的值。
可以在启动服务器或程序之前在命令行上设置它们。例如在bash中:
export MONGOID_USERNAME='username'
除非您将它们添加到您的个人资料中,否则它们仅适用于您的shell的生命周期,但您的Web服务器可能不会使用该配置文件,因此它仅对本地开发有用。
例如,也可以使用SetEnv在Apache中设置它们。例如:
<Location /app >
SetEnv MONGOID_HOST 'localhost'
SetEnv MONGOID_PORT '8883'
SetEnv MONGOID_USERNAME 'username'
</Location>
这可能是您的apache配置中SetEnv合法的任何地方,这与您的应用程序所在的上下文相同。
关于您对最佳做法的评论,有些人在源代码管理中放置了一个示例yml配置文件,并忽略源代码管理中的config/*.yml
文件。克隆存储库时,将示例复制并更正为正确的值是设置的一部分,例如运行rake tmp:create来创建tmp文件夹结构。
答案 1 :(得分:0)
我想在这里添加另一个选项。在启动时,Rails将尝试将DATABASE_URL
作为URL读取并从该env变量连接到数据库(忽略database.yml)。您应该将数据库指定为:
DATABASE_URL="mysql2://user:pass@localhost/app_development" rails server
您可以通过以下方式验证:
DATABASE_URL="..." rails runner "p ActiveRecord::Base.connection_config"
这只是另一种选择,而不是将erb设置放入database.yml
。