根据RAILS_ENV设置变量

时间:2013-03-07 07:07:20

标签: ruby-on-rails ruby ruby-on-rails-3

这是我当前的控制器:'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")

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

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

根据环境,我获取所有不同数据库的主机名,pwd,user,db_name。与大多数Rails应用程序不同,无论环境如何,我都会连接到多个数据库。

我应该做些什么? (使用最新版本的Rails)。

3 个答案:

答案 0 :(得分:1)

配置文件夹中的

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

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

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

使用RAILS_ENV = qa_1

运行您的rails应用

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

你可以设置settings_logic gem,设置envirornment明智的值

gem'settingslogic'

然后在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

答案 1 :(得分: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

答案 2 :(得分: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中,我使用这些常量来初始化我的规则模型。

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

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

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