2013-03-07 2 views
0

Это мой текущий контроллер: 'trace_controller.rb'Установка переменной в зависимости от RAILS_ENV

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 различных режимах - Балетмейстер и производство. У них есть имя хоста, Pwd, User, Database name, которые уникальны.

Как изменить эти параметры из среды environment.rb? Можете ли вы установить переменные в зависимости от них?

В зависимости от окружения, я получаю имя хоста, pwd, user, db_name для всех разных баз данных. В отличие от большинства приложений Rails, я подключаюсь к нескольким базам данных независимо от среды.

Любые идеи, что я должен делать? (Использование последней версии Rails).

+1

Какие ошибки вы принимаете? –

+0

Я пытаюсь определить константы сейчас, но это ошибка, которую я получаю - ActiveRecord :: ConnectionNotEstablished –

ответ

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 где-нибудь в вашем приложении.

+0

Я не дал всего изображения, это приложение больше похоже на интерфейс просмотра, который соединяется сразу с несколькими базами данных. Таким образом, каждый режим имеет разные базы данных для подключения. Я подключаюсь к базе данных через Sequel, и соединение определяется в Model Rules.rb. Сохранят ли глобальные константы? –

+0

Да, он все равно должен быть полезен – jvnill

+0

@Jnvill - Посмотрите измененный вопрос. Как вы думаете, я должен определить все эти константы в константах.rb? Также можем ли мы иметь объекты модели как константы? –

1

в папке конфигурации -> среда -> добавить еще один файл с именем среды

по умолчанию, development.rb,, test.rb и production.rb присутствуют. add let say qa_1.rb для вашей среды qa_1.

Установите требуемую конфигурацию в этом файле, вы можете скопировать ее из любого из существующих файлов окружения и изменить их по мере необходимости.

запустить приложение рельсы с RAILS_ENV = qa_1

потребуется конфиг из qa_1.rb файла

вы можете установить вероятно settings_logic драгоценный камень, чтобы установить envirornment мудрые значения

камень 'settingslogic'

Затем в приложение/модели/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 
+0

Не думаю, что мой вопрос был ясен. Он внес серьезные изменения в это. –

0

Это то, что работает для меня -:

1) Создание local.rb в config/environment (просто копия разработки)

2) Определение параметров для local в database.yml

3) Настройка параметров в конфигурации/окружении.гь

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) Не забудьте перезапустить сервер.

Извините за то, как мой вопрос был оформлен, поскольку это было довольно неясно. Надеюсь, этот ответ поможет кому-то в будущем.

Смежные вопросы