Я разрабатываю Rails v2.3 приложение с MySQL базой данных и mysql2
gem . Я столкнулся со странной ситуацией, которая заключается в изменении среды в rake task.
(все мои настройки и конфигурации для среды и базы данных верны, для этого нет проблем.)
Вот моя простая история:
У меня есть грабли, например:
namespace :db do
task :do_something => :environment do
#1. run under 'development' environment
my_helper.run_under_development_env
#2. change to 'custom' environment
RAILS_ENV='custom'
Rake::Task['db:create']
Rake::Task['db:migrate']
#3. change back to 'development' environment
RAILS_ENV='development'
#4. But it still run in 'customer' environment, why?
my_helper.run_under_development_env
end
end
Задача rake довольно проста:
1. Сначала запустите метод из my_helper
в среде " development "
2. Затем перейдите в среду " custom " и запустите db:create
и db:migrate
до сих пор все нормально, среда изменилась на " custom "
3. Затем верните его обратно в среду " development "
4. снова запустить вспомогательный метод в среде " development "
Но, хотя на шаге 3 я снова изменил среду на " development ", последний метод все еще выполняется в среде " custom ", почему? и как от этого избавиться?
--- P.S. ---
Я также проверил сообщение , связанное с изменением среды, здесь и попытался использовать там решение (на шаге 2):
#2. change to 'custom' database
ActiveRecord::Base.establish_connection('custom')
Rake::Task['db:create']
Rake::Task['db:migrate']
для изменения соединения с базой данных вместо изменения среды, но db:create
и db:migrate
будут по-прежнему работать в базе данных " development ", хотя в сообщении, в котором говорится, что оно должно работать для " custom"база данных ... странно
--------------- важное обновление ---------------------
Я просто понимаю, что код в шаге 2:
#2. change to 'custom' environment
RAILS_ENV='custom'
Rake::Task['db:create']
Rake::Task['db:migrate']
меняет среду на " custom " , только если вызывается Rake::Task['db:create']
, если я закомментирую строку Rake::Task['db:create']
, код все равно будет запущен при разработке
#2. change to 'custom' environment
RAILS_ENV='custom'
#Rake::Task['db:create']
#CODE WILL RUN STILL UNDER 'development' environment.
Почему Rake::Task['db:create']
влияет на изменение среды в моем случае ...?