J'essaie de créer une tâche de râteau personnalisée, mais il semble que je n'ai pas accès à mes modèles. Je pensais que c'était quelque chose implicitement inclus dans la tâche des rails.
J'ai le code suivant dans lib / tasks / test.rake:
namespace :test do
task :new_task do
puts Parent.all.inspect
end
end
Et voici à quoi ressemble mon modèle parent:
class Parent < ActiveRecord::Base
has_many :children
end
C'est un exemple assez simple, mais j'obtiens l'erreur suivante:
/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent
(See full trace by running task with --trace)
Des idées? Merci
ruby-on-rails
activerecord
rake
task
gmoniey
la source
la source
new_task
à l'environnement actuel? quelle est la valeur actuelle de:environment
? Google n'aide pas.new_task
, chargez d'abord l'environnement (chargez vos modèles), puis exécutez new_task.vous pourriez avoir besoin d'exiger votre configuration (qui devrait spécifier tous vos modèles requis, etc.)
par exemple:
Alternativement, vous pouvez simplement les demander séparément, mais vous pourriez avoir des problèmes d'environnement AR non configurés, etc.)
la source
Lorsque vous commencez à écrire vos tâches de râteau , utilisez un générateur pour les éliminer pour vous.
Par exemple:
Vous obtiendrez un stub créé dans lib / tâches appelé
my_tasks.rake
(utilisez évidemment votre propre espace de noms.) Qui ressemblera à ceci:Tous vos modèles de rails, etc. seront disponibles pour l'environnement actuel à partir de chaque bloc de tâches, sauf si vous utilisez l' environnement de production , auquel cas vous devez exiger les modèles spécifiques que vous souhaitez utiliser. Faites-le dans le corps de la tâche. (IIRC cela varie entre les différentes versions de Rails.)
la source
environment
est requis en tant que dépendance, puis dire la syntaxe plutôt que d'encourager l'OP à s'appuyer sur des utilitaires "magiques" qui n'utilisent même pas de magie?Avec la nouvelle syntaxe de hachage ruby (Ruby 1.9), l'environnement sera ajouté comme ceci à la tâche de râteau:
la source
La dépendance de l'environnement: est correctement appelée, mais rake peut ne pas encore connaître les autres gemmes dont vos modèles dépendent - dans un cas à moi, 'protected_attributes'.
La réponse est d'exécuter:
Cela garantit que l'environnement inclut toutes les gemmes spécifiées dans votre Gemfile.
la source
Générez la tâche en utilisant la commande ci-dessous (espace de noms avec le nom de la tâche):
Utilisez la syntaxe ci-dessous pour ajouter de la logique:
Exécutez la tâche ci-dessus à l'aide de la commande ci-dessous:
ou
la source