Rails 3, la tâche rake ne pouvez pas trouver un modèle de production
Mon simple tâche rake, stockées dans lib/tasks/items_spider.rake
fonctionne très bien en développement. Il fait appel spider!
sur le Item
modèle.
namespace :items do
desc "Spider the web for data, hoorah"
task :spider => :environment do
Item.spider!
end
end
J'ai le :environment
tâche comme une dépendance, donc tout fonctionne bien. Cependant, lorsque j'ajoute RAILS_ENV=production
, j'ai frappé à des erreurs, à la fois sur mon serveur local et sur le serveur de production:
$ rake items:spider RAILS_ENV=production --trace
(in /home/matchu/Websites/my-rails-app)
** Invoke items:spider (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute items:spider
rake aborted!
uninitialized constant Object::Item
/home/matchu/.rvm/gems/ruby-1.9.2-preview3@rails3/gems/rake-0.8.7/lib/rake.rb:2503:in `const_missing'
/home/matchu/.rvm/gems/ruby-1.9.2-preview3@rails3/gems/rspec-core-2.0.0.beta.22/lib/rspec/core/backward_compatibility.rb:20:in `const_missing'
/home/matchu/.rvm/gems/ruby-1.9.2-preview3@rails3/gems/rspec-expectations-2.0.0.beta.22/lib/rspec/expectations/backward_compatibility.rb:6:in `const_missing'
/home/matchu/Websites/openneo-impress-items/lib/tasks/items_spider.rake:4:in `block (2 levels) in <top (required)>'
/home/matchu/.rvm/gems/ruby-1.9.2-preview3@rails3/gems/rake-0.8.7/lib/rake.rb:636:in `call'
[...trace of how rake gets to my task...]
Cela semble juste bizarre pour moi. Apparemment, les modèles n'ont pas été chargé correctement. Je suis sur des Rails 3.0.3, si le développement sur cette application a commencé lorsque Rails 3 est en version bêta. Comment puis-je aller sur le débogage de ce problème? Merci!
- Pour atteindre un peu ici, mais avez-vous essayé de déplacer le RAILS_ENV déclaration au début de la commande?
- non 🙁 Merci!
- Où est le
Item
modèle gardé? L'habitude spot? - mhm.
app/models/item.rb
- D'aller au lit maintenant; c'est en quelque sorte seulement maintenant eu lieu pour moi de tester avec d'autres modèles. Vais essayer ça demain 🙂 Merci!
- Voir cette réponse.
Vous devez vous connecter pour publier un commentaire.
Contraire à l'exécution de votre application en production, une tâche Rake ne pas désireux de charge l'intégralité de votre base de code. Vous pouvez le voir dans la source:
Donc seulement si
$rails_rake_task
estfalse
, l'application sera désireux de chargement de production. Et$rails_rake_task
est fixé àtrue
dans le:environment
tâche Rake.La solution plus simple est de simplement
require
le modèle que vous avez besoin. Toutefois, si vous vraiment besoin de votre demande à être chargé dans la tâche Rake, il est assez simple à charger:La raison, l'ensemble de ce travail dans le développement est parce que les Rails de la charge automatiquement quand vos modèles de mode de développement. Cela fonctionne aussi à partir de l'intérieur d'une tâche Rake.
$rails_rake_task
n'est plus défini dans les versions récentes de râteau ou de rails, mais vous pouvez toujours définir manuellement$rails_rake_task = true
dans votre RakefileNameError: uninitialized constant ...
lors de l'exécution d'une tâche rake dans l'environnement de production seulement (dev a bien fonctionné). L'ajout deRails.application.eager_load!
résolu le problème pour moi.Dans votre environnement de production.rb, vous devez ajouter les éléments suivants:
Il a résolu le problème pour moi.
(Note: ce doit être ajouté APRÈS le config.des threads! d'appel)
$rails_rake_task
n'est plus défini dans les versions récentes de râteau ou de rails, mais vous pouvez toujours définir manuellement$rails_rake_task = true
dans votre RakefileJuste trouvé un autre: j'ai été le développement sur windows, le déploiement d'Heroku. L'application web et les rails de la console a bien fonctionné, mais râteau tâches et même de les diriger besoin n'a pas pu charger le modèle. S'est avéré que j'avais distraitement créé le fichier de modèle
Model.rb
au lieu demodel.rb
dépendante du système de la casse.