簡體   English   中英

rake任務中的環境變化

[英]environment change in rake task

我正在使用MySQL數據庫和mysql2 gem開發Rails v2.3應用程序。 我遇到了一個奇怪的情況,那就是在rake任務中改變環境

(我對環境和數據庫的所有設置和配置都是正確的,沒問題。)

這是我的簡單故事:

我有一個像下面這樣的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

rake任務非常簡單,它的作用是:

1.首先,在“ 開發 ”環境下運行my_helper的方法

2.然后,切換到“ 自定義 ”環境並運行db:createdb:migrate

到現在為止,一切都很好,環境確實變成了“ 習俗

3.然后,再次變回“ 開發 ”環境

4.在“ 開發 ”環境下再次運行輔助方法

但是,雖然我已經在第3步中將環境改回“ 開發 ”,但最后一種方法仍然在“ 自定義 ”環境中運行,為什么? 以及如何擺脫它?

--- PS ---

我還在這里檢查了與環境變化相關的帖子,並嘗試在那里使用解決方案(在步驟2中):

#2. change to 'custom' database
ActiveRecord::Base.establish_connection('custom')
Rake::Task['db:create']
Rake::Task['db:migrate']

更改數據庫連接而不是更改環境,但db:createdb:migrate仍將在“ 開發 ”數據庫下運行,盡管鏈接的帖子說它應該運行“ 自定義 ”數據庫...怪異

---------------重要更新---------------------

我只是意識到第2步中的代碼:

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

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

只有當 Rake::Task['db:create']被調用時, 才會將環境更改為“ custom ”,如果我注釋掉Rake::Task['db:create']行,代碼仍會在' development '下運行:

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

#Rake::Task['db:create']
#CODE WILL RUN STILL UNDER 'development' environment.

為什么Rake::Task['db:create']在我的情況下會影響環境變化......?

我意識到這個問題是從一個多月前開始的,但他們到底是什么 - 這是聖誕節

看起來在自己的流程中運行每個rake任務會在切換環境時簡化一些事情嗎?

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

只需在rake任務后輸入RAILS_ENV ='production'

在你的情況下

rake db:do_something RAILS_ENV ='custom'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM