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
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce problème aussi, dans mon
db/seeds.rb
fichier j'ai un bloc qui crée des comptes d'utilisateur dans l'environnement de développement, mais ils ont également été créés lors de la préparation de l'environnement de test à exécuterrake
pour RSpec ou de Concombre de test, ce qui a entraîné un mur de rouge.Mis à jour: j'ai trouvé que le meilleure façon de spécifier l'environnement pour les tâches rake est de spécifier l'environnement au sein du groupe, au-dessus de toutes les déclarations qui ont besoin de l'environnement à définir. Donc dans ce cas:
fait le travail.
À la lecture de la db:tâches de test de la sourceon dirait qu'ils ne se soucient que de saisir le test db info à partir de la base de données.yml, mais ne pas les soins qui leur environnement, ils le font sous.
Vous pourriez avoir besoin pour exécuter rake db:test:préparer RAILS_ENV=test pour vous assurer que vous êtes sous l'environnement de test.