2011-11-28 2 views
0

Я занимаюсь разработкой Rails v2.3 приложение с MySQL базы данных и mysql2драгоценный камень. Я столкнулся с странной ситуацией, которая составляет около изменение окружающей среды в rake задача.изменения окружающей среды в передней задаче

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

Вот моя простая история:

У меня есть задача грабли, как следующее:

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 

грабли задача довольно проста, что она делает это:

1. Во-первых, запустить метод из my_helper под "развития" среды

2. Тогда изменение "пользовательских" окружающей среды и не запускать db:create и db:migrate

до сих пор, все хорошо, среда же изменится на «обычая»

3. Затем измените его обратно в «развитие» среда

4. запустить вспомогательный метод снова под «развития» окружающая среда

Но, хотя я изменил окружающую среду обратно «развития» на шаге 3, последний метод все еще работает в «custom« окружающая среда, почему? и как избавиться от него?

--- P.S. ---

Я также проверил почту related with environment change here, и пытался использовать решение там (на шаге 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» database ...странно

--------------- важное обновление ---------------------

I просто понять, что код на шаге 2:

#2. change to 'custom' environment 
RAILS_ENV='custom' 

Rake::Task['db:create'] 
Rake::Task['db:migrate'] 

он изменяет среду в «пользовательских» только если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'] влияет на изменение окружающей среды в моем случае ...?

ответ

2

Я понимаю, что этот вопрос из более чем месяца назад, но то, что они щеколда - это Рождество

похоже, работает каждую задачу рек в своем собственном процессе позволит упростить вещи при переключении среды?

namespace :db do 
    task :do_something => :environment do 
     unless Rails.env.development? then 
      raise "Can only run under development environment, but specified env was #{Rails.env}" 
     end 

     #1. run under 'development' environment 
     my_helper.run_under_development_env 

     #2. do the giggity with custom environment 
     command = "bundle exec rake db:create RAILS_ENV=custom"  
     result = %x[#{command}] 
     raise "rake task failed..........\n#{result}" if result.include?('rake aborted!') 

     command = "bundle exec rake db:migrate RAILS_ENV=custom"  
     result = %x[#{command}] 
     raise "rake task failed..........\n#{result}" if result.include?('rake aborted!') 


     #3. back to development 
     my_helper.run_under_development_env 
    end 
end 
Смежные вопросы