Rails: Rendez cette tâche de rake consciente qu'elle se trouve dans l'environnement de test

J'ai le texte suivant tâche rake définie dans mon lib/tasks dossier:

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

Maintenant, ce que cela fait, c'est de la graine de l'essai DB quand je lance rake db:test:prepare. Je le fais parce que j'ai quelques enregistrements de base qui doivent exister pour que l'application de la fonction, de sorte qu'ils ne sont pas facultatifs et ne peut pas vraiment se moque de lui.

Séparément, j'ai un modèle qui utilise S3 pour les actifs de stockage dans le développement et la production, mais je n'en veux pas utiliser S3 pour les tests. J'ai mis en place une méthode dans le modèle qui change le chemin de stockage à partir de S3 locale si Rails.env.test?

Cependant, ce n'est pas de travail. Je me demandais si la tâche rake était au courant de ce contexte, il a été appelé, et il s'avère qu'il ne l'est PAS. J'ai mis en haut de mes graines.rb fichier:

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

Bien sûr, quand l'exécution de la tâche de cette affiche: Environment Check: Rails Environment = development

Alors, comment puis-je refaire cette tâche rake de sorte que lorsque c'est l'amorçage de l'essai DB, il sait que c'est l'amorçage de l'essai DB??

source d'informationauteur Andrew