【问题标题】:Multiple instances of app and configurations应用程序和配置的多个实例
【发布时间】:2014-10-21 19:38:03
【问题描述】:

我有一个 Rails 3.2.x 应用程序,我将在多个服务器上安装它,每个服务器都用于不同的公司。因此,徽标路径、twilio API 密钥、某些视图文本简介等内容将因公司而异。每个服务器实例都将使用相同的 github 代码库 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 应用程序加载它们以便可以从视图、控制器、模型等中调用它们的正确方向?

【问题讨论】:

  • 是的,在你的 deploy.rb 中只是将配置文件链接到服务器本地文件,不是很花哨,但很容易做到。

标签: ruby-on-rails-3 git github environment-variables yaml


【解决方案1】:

我想我想出了如何使这项工作,仍然需要测试。

首先我为公司设置创建一个初始化程序,如果 company.yml 文件没有更改则设置默认值,并在 YAML 加载时合并属性

config/initializers/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 文件: config/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 mydatabase.yml` 文件中的正确服务器,以便它在发布部署之间持续存在:

deploy.rb 摘录

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

我认为这可行,但我需要在登台服务器上对其进行测试,尤其是 capistrano 符号链接部分。

【讨论】:

  • 我已经对此进行了测试,但合并是向后的。它采用default_company 并覆盖/合并company.yml 文件。当我反转它Company = default_company.merge(YAML.load_file(Rails.root.join('config', 'company.yml'))) 时,我得到一个 rails 服务器错误意外结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2017-09-03
  • 2010-11-15
相关资源
最近更新 更多