我有一个Rails 3.2.x应用程序,我将在多个服务器上安装,每个服务器都用于不同的公司。因此徽标路径,twilio API密钥,一些视图文本模糊等内容将根据公司的不同而有所变化。每个服务器实例将使用相同的github codebase repo,但我需要每个服务器的配置,例如这些项目。
我正在阅读如何使用ENV变量设置这样的东西,但我有点困惑。我基本上希望有一个github repo来跟踪,但每个公司/服务器有不同的配置。
我在想我可以创建一个包含这些ENV变量的config / application.yml文件,但我不确定如何让rails加载该文件。我将config / application.yml添加到.gitignore并在app / shared / config下的每个服务器上手动创建一个单独的config / application.yml文件,并在我的Capistrano deploy.rb中执行符号链接。
有人可以帮我指出在application.yml文件中设置ENV变量的正确方向,并让我的Rails应用加载它们,以便可以在视图,控制器,模型等中调用它们吗?
答案 0 :(得分:1)
我想我想出了如何做这项工作,还需要测试。
首先,我为公司设置创建初始化程序,如果company.yml文件没有更改则设置默认值,并在YAML加载时合并属性
<强>配置/初始化/ company.rb 强>
default_company = {
name: "changeme",
phone: "000-000-0000",
email: "default_email@changemeplease.com",
logo_path: "public/logo_changeme.png",
email: "company@changeme.com",
no_reply_email: "noreply@changeme.com"
}
Company = YAML.load_file(Rails.root.join('config', 'company.yml')).merge(default_company)
然后使用特定的公司设置创建YAML文件: 的配置/ company.yml 强>
---
:name: acme
:phone: '281-444-8800'
:logo_path: 'public/acme.png'
:email: 'company@acme.com'
:no_reply_email: 'noreply@acme.com'
然后我会确保company.yml
位于.gitignore
,因此它不会被推送到回购。之后,我会scp
company.yml
app/shared/config directory. Then somehow in my Capistrano deploy, symlink after deploy similar to how I symlink my
database.yml`文件中的正确服务器task :after_update_code do
run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml"
run "ln -nfs #{deploy_to}/shared/config/company.yml #{release_path}/config/company.yml"
end
,以便它在发布部署之间保持不变:
deploy.rb摘录
{{1}}
我认为这会有效,但我需要在登台服务器上测试它,尤其是capistrano符号链接部分。