2011-02-16 4 views
16

J'essaie de déployer une application rails 3 à heroku pour la première fois. Il semble pousser vers le haut ok mais quand je tente d'exécuterheroku rake db: migrer> pas de fichier à charger - faker

heroku rake db:migrate 

Je reçois l'erreur suivante:

rake aborted! 
no such file to load -- faker 
/app/98c71cc3-375f-4397-9de3-034dd7268be3/home/Rakefile:7 
(See full trace by running task with --trace) 
(in /app/98c71cc3-375f-4397-9de3-034dd7268be3/home) 

Voici mon rakefile (ligne 7 est le dernier):

require File.expand_path('../config/application', __FILE__) 
require 'rake' 

SampleApp::Application.load_tasks 

Maintenant, j'ai une tâche appelée sample_data.rake qui utilise la fake gem pour remplir la base de développement avec des exemples de données et cette tâche a la ligne:

require 'faker' 

en haut qui doit être à l'origine du problème.

Comment réparer cette erreur ou y a-t-il un moyen pour que heroku ignore ce fichier de tâche? Je ne vais pas vouloir peupler la version de production avec des données d'échantillons non-sens de toute façon.

Par ailleurs, Faker est actif uniquement dans l'environnement de développement dans mon gemsfile:

# gemfiles for the rspec testing environment 
group :development do 
    gem 'rspec-rails', '2.5.0' 
    gem 'annotate-models', '1.0.4' 
    gem 'faker', '0.3.1' 
end 

Répondre

21

Déplacez le require dans la tâche. Par exemple

# sample_data.rake 
require 'faker' 

task :sample_data => :environment do 
# ... 
end 

à

# sample_data.rake 
task :sample_data => :environment do 
    require 'faker' 

# ... 
end 

De cette façon, la bibliothèque ne sera nécessaire que lorsque la tâche est invoquée.

L'autre alternative est de ne pas avoir besoin de Faker dans votre fichier Rake. En fait, il est déjà chargé par Bundler lorsque le bundle est exécuté en développement.

Si vous ne voulez pas Bundler charger le Gem, pour moi utiliser

gem 'faker', '0.3.1', :require => false 
+0

La première solution n'a pas fonctionné pour moi, mais en ajoutant '': require => false', la première solution a fonctionné –

+0

. Tu gères ! – Jashwant

1

, première approche de Simone ne fonctionnait pas, mais le second a fait: require 'faker' peut être supprimé à partir du fichier de coupe.

1

Moi aussi, je commentais sur require « truqueur » dans le répertoire lib/tâches/fichier sample_data.rake et (Après avoir commis ce changement via git) a poussé les fichiers à Heroku, ce qui a permis $heroku rake db:migrate --app <my app name> d'exécuter avec succès, et ergo le site heorku a commencé à travailler à nouveau.

Merci!

Questions connexes