2010-09-21 7 views
8

Je suis nouveau sur Rails et je suis en train de créer une application de suivi de projet simple pour mon employeur. J'ai développé l'application sur mon Mac et je l'ai poussée sur github. J'ai juste réussi à cloner mon repo de github à une boîte de fenêtres derrière le pare-feu de mon entreprise dans l'espoir de laisser des collègues essayer l'application.rake db: migrate produit une erreur "rake avorté! Impossible à trouver"

Mais quand je vais à rake db: migrer pour initialiser la base de données sur la boîte de Windows, je reçois des messages d'erreur suivants:

$ rake db:migrate --trace 
** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
rake aborted! 
Could not find table 'projects' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_reco 
rd/connection_adapters/sqlite3_adapter.rb:29:in `table_structure' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/faker-0.3.1/lib/extensions/object. 
rb:3:in `returning' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_reco 
rd/connection_adapters/sqlite3_adapter.rb:28:in `table_structure' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_reco 
rd/connection_adapters/sqlite_adapter.rb:228:in `columns' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_reco 
rd/base.rb:1271:in `columns' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_reco 
rd/base.rb:1279:in `columns_hash' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_reco 
rd/base.rb:1578:in `find_one' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_reco 
rd/base.rb:1569:in `find_from_ids' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_reco 
rd/base.rb:616:in `find' 
c:/Rails_Projects/molex_app/config/routes.rb:15 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_contro 
ller/routing/route_set.rb:226:in `draw' 
c:/Rails_Projects/molex_app/config/routes.rb:1 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_sup 
port/dependencies.rb:145:in `load_without_new_constant_marking' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_sup 
port/dependencies.rb:145:in `load' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_sup 
port/dependencies.rb:521:in `new_constants_in' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_sup 
port/dependencies.rb:145:in `load' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_contro 
ller/routing/route_set.rb:286:in `load_routes!' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_contro 
ller/routing/route_set.rb:286:in `each' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_contro 
ller/routing/route_set.rb:286:in `load_routes!' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_contro 
ller/routing/route_set.rb:266:in `reload!' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:537 
:in `initialize_routing' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:188 
:in `process' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113 
:in `send' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113 
:in `run' 
c:/Rails_Projects/molex_app/config/environment.rb:9 
c:/RubyonRails/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in ` 
gem_original_require' 
c:/RubyonRails/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in ` 
require' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_sup 
port/dependencies.rb:156:in `require' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_sup 
port/dependencies.rb:521:in `new_constants_in' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_sup 
port/dependencies.rb:156:in `require' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/tasks/misc.rake:4 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `cal 
l' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `exe 
cute' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `eac 
h' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `exe 
cute' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:578:in `inv 
oke_with_call_chain' 
c:/RubyonRails/Ruby187/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:571:in `inv 
oke_with_call_chain' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:588:in `inv 
oke_prerequisites' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:585:in `eac 
h' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:585:in `inv 
oke_prerequisites' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:577:in `inv 
oke_with_call_chain' 
c:/RubyonRails/Ruby187/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:571:in `inv 
oke_with_call_chain' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:564:in `inv 
oke' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2019:in `in 
voke_task' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `to 
p_level' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `ea 
ch' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `to 
p_level' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2036:in `st 
andard_exception_handling' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1991:in `to 
p_level' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1970:in `ru 
n' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2036:in `st 
andard_exception_handling' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1967:in `ru 
n' 
c:/RubyonRails/Ruby187/lib/ruby/gems/1.8/gems/rake-0.8.3/bin/rake:31 
c:/RubyonRails/Ruby187/bin/rake:19:in `load' 
c:/RubyonRails/Ruby187/bin/rake:19 

Ma liste de pierres précieuses ressemble à ceci:

$ gem list 

*** LOCAL GEMS *** 

actionmailer (2.3.5) 
actionpack (2.3.5) 
activerecord (2.3.5) 
activeresource (2.3.5) 
activesupport (2.3.5) 
faker (0.3.1) 
rack (1.0.1, 1.0.0) 
rails (2.3.5) 
rake (0.8.3) 
sqlite3-ruby (1.3.0 x86-mingw32) 
will_paginate (2.3.12) 

Mon fichier schema.rb sur la boîte de Windows ressemble à ceci:

# This file is auto-generated from the current state of the database. Instead of editing this file, 
# please use the migrations feature of Active Record to incrementally modify your database, and 
# then regenerate this schema definition. 
# 
# Note that this schema.rb definition is the authoritative source for your database schema. If you need 
# to create the application database on another system, you should be using db:schema:load, not running 
# all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations 
# you'll amass, the slower it'll run and the greater likelihood for issues). 
# 
# It's strongly recommended to check this file into your version control system. 

ActiveRecord::Schema.define(:version => 20100915193510) do 

    create_table "assets", :force => true do |t| 
    t.integer "project_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "image_file_name" 
    t.string "image_content_type" 
    t.integer "image_file_size" 
    t.datetime "image_updated_at" 
    end 

    create_table "macroposts", :force => true do |t| 
    t.text  "content" 
    t.integer "user_id" 
    t.integer "project_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    create_table "projects", :force => true do |t| 
    t.string "title" 
    t.integer "status",    :limit => 255 
    t.integer "program_manager_id" 
    t.integer "design_engineer_id" 
    t.string "sales_engineer" 
    t.string "customer" 
    t.string "market_size" 
    t.string "project_code" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    add_index "projects", ["design_engineer_id"], :name => "index_projects_on_design_engineer_id" 
    add_index "projects", ["program_manager_id"], :name => "index_projects_on_program_manager_id" 

    create_table "statuses", :force => true do |t| 
    t.string "status_name" 
    t.integer "status_code" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    create_table "users", :force => true do |t| 
    t.string "name" 
    t.string "email" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "encrypted_password" 
    t.string "salt" 
    t.string "remember_token" 
    t.boolean "admin",    :default => false 
    t.string "avatar_file_name" 
    t.string "avatar_content_type" 
    t.integer "avatar_file_size" 
    t.datetime "avatar_updated_at" 
    end 

    add_index "users", ["email"], :name => "index_users_on_email", :unique => true 
    add_index "users", ["remember_token"], :name => "index_users_on_remember_token" 

end 

Comme c'est la première fois que je cours migrations sur cette machine, je m'attendrais à ce que rien sur le processus de migration ne cherche à accéder à la table «projets» avant sa création. Mais je remarque que la table "projects" n'est listée dans schema.rb qu'après plusieurs tables qui lui sont associées (assets, macroposts.) Est-ce la source du problème?

Ou est une sorte de problème de dépendance à la gemme au travail ici? J'ai remarqué que la gemme «faker» apparaît en haut de la liste des erreurs, même si je ne m'en sers vraiment pas sauf dans mes tests (copiés de RailsTutorial.org de Michael Hartl.)

Merci pour toute aide ou suggestion que vous pouvez offrir!

Dean Richardson Genlighten.com

Répondre

0

pourrait vouloir essayer de rake db:create également vous assurer que vos fichiers de configuration sont corrects en pointant vers le serveur SQL que vous voulez.

Assurez-vous également que tous vos fichiers de migration sont corrects et ne comportent aucune erreur de syntaxe ou autre.

+0

le environment.rb et les fichiers database.yml les deux semblent pointer vers sqlite3 et la gemme sqlite3-ruby approprié. Il est possible que mes fichiers sqlite3 soient en quelque sorte incompatibles avec mes autres fichiers Rails, mais si c'est le cas, ce n'est pas évident. Mes fichiers de migration fonctionnent sur d'autres machines, donc je suis assez confiant. – hikari17

+0

J'ai supprimé la base de données de développement vide et j'ai lancé rake db: create comme vous l'avez suggéré. Aucune erreur "Impossible de trouver une table" n'a été soulevée cette fois. Je puis essayé de démarrer le serveur (script « ruby ​​/ serveur ») et a obtenu une longue décharge d'erreur qui a commencé avec « n'a pas pu trouver des « projets » table. Le problème de base est toujours là. – hikari17

+0

vous devez exécuter les migrations après la création du base de données, donc je courrais 'rake db: migrate' après l'exécution de' rake db: create' – Jimmy

13

J'ai eu ce problème exact ces dernières semaines sur un projet parallèle sur lequel je travaillais. La réponse est devenue claire pour moi quand j'ai couru rake db:migrate avec --trace. Une fois là, j'ai remarqué que la trace de la pile se plaignait que factory_girl ne puisse pas instancier l'élément manquant de la table.

Je suis allé dans mon fichier factory.rb et supprimé le modèle fautif et après que j'ai pu exécuter rake db:migrate. En outre, le problème pour moi était:

Factory.define :table1 do |b| 
    b.name "table1" 
    b.rating 5 
    b.table2_relation Factory(:table2) 
end 

Dans ce cas, l'usine à l'intérieur de l'usine a tenté d'insérer pendant la tâche de râteau. Comme la table n'existait pas encore, elle a explosé. Avec un peu d'aide, j'ai trouvé que la façon correcte de le faire est:

Factory.define :table1 do |b| 
    b.name "table1" 
    b.rating 5 
    b.table2_relation {Factory(:table2)} 
end 
+1

Merci.! pour que c'était exactement mon problème, trop –

+1

Toute idée pourquoi fille usine devrait faire quelque chose comme ça pendant schéma:..? charge en premier lieu ne devrait pas le schéma: il suffit d'utiliser la charge database.yml et schema.rb – bchurchill

5

Je viens de rencontrer ce même problème. rake db:create fonctionnerait, mais tout autre exécution, comme rake db:schema:load ou rake db:migrate, a échoué avec une erreur sur une table manquante. La réponse de Chris Hein m'a indiqué la bonne direction. La table manquante était référencée dans les spécifications, et pour une raison quelconque, elles étaient chargées dans le cadre de l'environnement avant que les tâches de rake ne soient exécutées. J'ai juste déplacé le dossier de specs, ai couru les tâches de rake, et le déplacé en arrière.

+1

That? Donc, suite à ce que vous avez dit, j'ai commenté le code dans un fichier initialiser (excusez l'orthographe britannique) avec le code référençant ce modèle, puis 'rake db: schema: load' (parce que juste' rake db: mi râle »avait toujours des ennuis), et voilà, ça a marché. Merci! – mjnissim

0

A eu un problème similaire et il était à voir avec factory_girl comme Chris l'a souligné.De cette façon, semble être un moyen plus facile de le résoudre:

En Gemfile, définir fille usine comme ceci:

gem 'factory_girl_rails', :require => false 

Puis dans le fichier spec_helper.rb:

require 'factory_girl_rails' 

Voici le lien vers réponse originale: FactoryGirl screws up rake db:migrate process

Questions connexes