33 votes

Impossible de trouver la table 'users'.

UPDATE 4

Voir la solution ci-dessous !

**Mise à jour 3 **

Si quelqu'un lit encore ce message (j'apprécie !), je me suis débattu avec mon code aujourd'hui (oui, je suis toujours un noob et je suis au chapitre 11 du tutoriel ruby on rails).

J'ai soi-disant réinitialisé à ma dernière livraison :

$ cd rails_screencast/sample_app/
$ git reset --hard 2396c0d288d132ffc43c82d5cbbc736a5258eed2
HEAD is now at 2396c0d Micropost Validations

Lorsque je vérifie le site sur l'hôte local, il affiche effectivement une liste d'utilisateurs et non une page d'erreur, mais lorsque je lance la suite de tests (autotest avec spork - j'ai réinitialisé ces derniers plusieurs fois pour être sûr), j'obtiens toujours toutes les erreurs telles que celles présentées ci-dessous. Je suis très curieux au sujet de "Could not find table 'users'" car il est dans CHAQUE erreur #.

  108) Users signin success should sign a user in and out
     Failure/Error: user = Factory(:user)
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/requests/users_spec.rb:56:in `block (4 levels) in <top (required)>'

Finished in 0.9872 seconds
108 examples, 108 failures

Il est temps de continuer à travailler et à chercher toutes ces erreurs, si quelqu'un peut offrir un aperçu ou des conseils ou des idées sur ce qu'il faut vérifier, je l'apprécierais ! Ou si vous avez besoin d'informations supplémentaires, je peux les poster aussi (il suffit d'être très spécifique sur les fichiers à voir car je ne suis pas totalement à l'aise dans le jargon comme beaucoup le sont déjà).

Mise à jour 2 :

Il semble que ma réinitialisation ait dérangé quelque chose avec les paramètres d'usine car parfois toutes mes erreurs pointent vers la ligne 5 de mon fichier micropost_spec.rb spécifiquement @ la ligne @user = Factory(:user)... presque comme si mon fichier d'usine n'était plus lié à rien. Je me demande si un rake db:migrate pourrait résoudre mes problèmes... ou juste créer de nouveaux problèmes... Je n'ai que des données d'exemple à remplir avec faker

Des idées ?

Est-il possible de rétablir mon système de fichiers à un commit précédent et de recommencer ? ... quand j'étais vert

Failures:

  1) Micropost should create a new instance with valid attributes
     Failure/Error: @user = Factory(:user)
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/models/micropost_spec.rb:5:in `block (2 levels) in <top (required)>'

  2) Micropost user associations should have a user attribute
     Failure/Error: @user = Factory(:user)
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/models/micropost_spec.rb:5:in `block (2 levels) in <top (required)>'

  3) Micropost user associations should have the right associated user
     Failure/Error: @user = Factory(:user)
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/models/micropost_spec.rb:5:in `block (2 levels) in <top (required)>'

  4) Micropost validations should have a user id
     Failure/Error: @user = Factory(:user)
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/models/micropost_spec.rb:5:in `block (2 levels) in <top (required)>'

  5) Micropost validations should require nonblank content
     Failure/Error: @user = Factory(:user)
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/models/micropost_spec.rb:5:in `block (2 levels) in <top (required)>'

  6) Micropost validations should reject long content
     Failure/Error: @user = Factory(:user)
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/models/micropost_spec.rb:5:in `block (2 levels) in <top (required)>'

Mise à jour 1 :

Je reçois des erreurs de 4 à 6 à 111, toutes avec un thème récurrent de

 1) Micropost should create a new instance with valid attributes
     Failure/Error: @user = Factory(:user)
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/models/micropost_spec.rb:53:in `block (2 levels) in <top (required)>'

Plus précisément, le message "Could not find table 'users'" - J'ai copié le code du tutoriel git pour le fichier micropost_spec.rb mais cela ne semble pas résoudre le problème - peut-être que quelqu'un peut m'aider à trouver à quoi la table fait référence ?

////////////////////////////////////// ORIGINAL CI-DESSOUS ////////////////////////////////

Je travaille sur la leçon 11 du Ruby on Rails Tutorial et j'essaie d'alimenter ma base de données pour afficher les microposts.

lorsque j'ai exécuté la commande rake db:populate, j'ai obtenu le résultat suivant :

    macbook:sample_app macbook$ rake db:populate
(in /Users/macbook/rails_screencast/sample_app)
db/test.sqlite3 already exists
db/test.sqlite3 already exists
db/development.sqlite3 already exists
-- create_table("microposts", {:force=>true})
   -> 0.0090s
-- add_index("microposts", ["user_id"], {:name=>"index_microposts_on_user_id"})
   -> 0.0074s
-- create_table("users", {:force=>true})
   -> 0.0243s
-- add_index("users", ["email"], {:name=>"index_users_on_email", :unique=>true})
   -> 0.0094s
-- initialize_schema_migrations_table()
   -> 0.0167s
-- assume_migrated_upto_version(20110614132314, "db/migrate")
   -> 0.0432s
rake aborted!
Validation failed: Email is invalid

Je l'ai lancé plusieurs fois et j'ai eu la même erreur... quand j'ai visité le site sur un navigateur, c'était comme si aucun des utilisateurs de mon échantillon n'était là...

require 'faker'

namespace :db do 
  desc "Fill database with sample data"
  task :populate => :environment do
    Rake::Task['db:reset'].invoke
    admin = User.create!(:name => "Foo Bar",
                         :email => "foo@bar.com",
                         :password => "foobar",
                         :password_confirmation => "foobar")
   admin.toggle!(:admin)
    99.times do |n|
      name = Faker::Name.name
      email = "example-#{n+1}@railstutorial.org"
      password = "password"
      User.create!(:name => name,
                   :email => email,
                   :password => password,
                   :password_confirmation => password)
    end

    User.all(:limit => 6).each do |user|
      50.times do
        user.microposts.create!(:content => Faker::Lorem.sentence(5))
      end
    end
  end
end

puis j'ai décidé que peut-être rake db:reset purgerait ma base de données d'échantillon et que je pourrais relancer le populate avec des données fraîches... mauvaise supposition

ma suite de test montre maintenant :

Finished in 0.99915 seconds
111 examples, 111 failures

Avant d'en rajouter, j'aimerais avoir des conseils sur la marche à suivre...

118voto

rzschau Points 1198

Michael (auteur du railstutorial.org) a répondu à ma demande par courriel !

S'il vous manque un tableau lors de l'exécution de la suite de tests, c'est probablement une indication que vous devez exécuter :

rake db:test:prepare

YUP !! YAYYYY

Finished in 4.82 seconds
108 examples, 0 failures

C'EST L'HEURE DU GATEAU !

3voto

smathy Points 6925

Le site db:populate que vous montrez fait un db:reset lui-même, donc le faire manuellement ne peut pas avoir causé de problème qui ne se produisait pas déjà avec le db:populate .

Vous pouvez simplement supprimer votre db/*.sqlite3 et repartir de zéro. Il n'y a rien d'évident à cela db:populate qui expliquerait pourquoi la validation de l'email a échoué, vous devriez montrer le User et les validations que vous avez là-dedans pour nous permettre de diagnostiquer ce problème initial.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X