簡體   English   中英

Rails:讓這個rake任務知道它在測試環境中

[英]Rails: Make this rake task aware that it is in the test environment

我在lib/tasks文件夾中定義了以下rake任務:

namespace :db do
  namespace :test do
    task :prepare => :environment do
      Rake::Task["db:seed"].invoke
    end
  end
end

現在,當我運行rake db:test:prepare時,它的作用是播放測試數據庫。 我這樣做是因為我有一些必須存在的基本記錄才能使應用程序正常運行,所以它們不是可選的,也不能真正被嘲笑。

另外,我有一個在開發和生產中使用S3進行資產存儲的模型,但我不希望它使用S3進行測試。 我在模型中設置了一個方法,如果Rails.env.test?存儲路徑從S3更改為本地Rails.env.test?

但是,這不起作用。 我想知道rake任務是否知道它被調用的環境,事實證明它不是。 我把它放在我的seeds.rb文件的頂部:

puts "Environment Check: Rails Environment = #{Rails.env}"

果然,當任務運行時會打印出來: Environment Check: Rails Environment = development

那么,我怎樣才能重做這個rake任務,以便當它播種測試數據庫時它知道它正在為測試數據庫播種?

我也有這個問題; 在我的db/seeds.rb文件中,我有一個在開發環境中創建用戶帳戶的塊,但是在准備測試環境以運行rake進行RSpec或Cucumber測試時也會創建它們,這導致了一堵紅牆。

更新 :我發現為rake任務指定環境最佳方法是指定任務中的環境,首先是需要設置環境的所有語句。 所以在這種情況下:

Rails.env = 'test'
Rake::Task["db:seed"].invoke

做的工作。

通過閱讀db:test tasks的源代碼 ,看起來他們只關心從database.yml獲取測試數據庫信息,但不關心他們在哪個實際環境下執行它。

您可能需要運行rake db:test:prepare RAILS_ENV = test以確保您處於測試環境之下。

暫無
暫無

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

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