0

这是我当前的控制器:'trace_controller.rb'

rule_oms = Rule.new("localhost","root","","oms_local")
rule_warehouse=Rule.new("localhost","root","","warehouse_local")
rule_payment=Rule.new("localhost","root","","payment_local")

... .... 我们有 2 种不同的模式 - 分期和生产。它们具有唯一的主机名、密码、用户、数据库名称。

如何从 environment.rb 更改这些设置?您可以根据它们设置变量吗?

根据环境,我得到所有不同数据库的主机名、密码、用户、db_name。与大多数 Rails 应用程序不同,无论环境如何,我都连接到多个数据库。

任何想法我应该做什么?(使用最新版本的 Rails)。

4

3 回答 3

1

在 config 文件夹中 --> 环境 --> 添加另一个具有您的环境名称的文件

默认情况下, development.rb、 、 test.rb 和 production.rb 存在。为您的 qa_1 环境添加让我们说 qa_1.rb。

在此文件中设置所需的配置,您可以从任何现有环境文件中复制它并根据需要进行更改。

使用 RAILS_ENV=qa_1 运行您的 Rails 应用程序

它将从 qa_1.rb 文件中获取配置

您可以设置可能的 settings_logic gem,以设置环境明智的值

宝石“设置逻辑”

然后在 app/models/settings.rb 添加

class Settings < Settingslogic
  source "#{Rails.root}/config/application.yml"
  namespace Rails.env
end

并在 /config/application.yml 中为您设置特定于环境的数据

defaults: &defaults
  db: default_db
development:
  user: dev_user
test:
  user: test_user
production:
  user: prod_user
  db: prod_db
qa_1:
  user: qa_1_user
  db: qa_1_db

在 database.yml 中你也可以使用

qa_1:
  db: qa_db
  user: user
于 2013-03-07T07:34:04.880 回答
0

我不确定你想要实现什么,但如果你把它放在 中environment.rb,那么我只能猜测你想要某种全局常量。如果这是你想要的,我建议你在里面创建一个config/initializers名为的文件,constants.rb然后将以下内容放在那里。

RULE_OMS = Rule.new("oms-#{Rails.env}") 
RULE_WAREHOUSE = Rule.new("warehouse_#{Rails.env}")
RULE_PAYMENT = Rule.new("payment_#{Rails.env}")

然后只需RULE_OMS在您的应用程序中的任何位置调用。

于 2013-03-07T07:17:38.547 回答
0

这对我有用-:

1)在config/environments中创建local.rb(只是开发的副本)

2)在database.yml中定义local的参数

3)在config/environment.rb中设置参数

if Rails.env.local?
  OMS_HOST="localhost"
  OMS_DB="oms_local"
  OMS_USER="root"
  OMS_PWD=""

  WAREHOUSE_HOST="localhost"
  WAREHOUSE_DB="warehouse_local"
  WAREHOUSE_USER="root"
  WAREHOUSE_PWD=""

  PAYMENT_HOST="localhost"
  PAYMENT_DB="payment_local"
  PAYMENT_USER="root"
  PAYMENT_PWD=""
end

if Rails.env.development?
  OMS_HOST="amt.com"
  OMS_DB="oms_staging"
  OMS_USER="user1"
  OMS_PWD="xyz"
....
.....

4) 在 trace_controller.rb 中,我使用这些常量来初始化我的 Rule 模型。

5) 如果您正在使用它,请将其添加到 .gitignore 文件中。

6)不要忘记重新启动服务器。

为我的问题提出的方式道歉,因为它很不清楚。希望这个答案对将来的人有所帮助。

于 2013-03-07T13:10:43.940 回答