2010-09-21 12 views
8

Soy nuevo en Rails y estoy creando una aplicación de seguimiento de proyectos simple para mi empleador. He estado desarrollando la aplicación en mi Mac y llevándola a github. Me las arreglé para clonar mi repo de github en un recuadro de ventanas detrás del firewall de mi empresa con la esperanza de permitir que los colegas prueben la aplicación.rake db: migrate produce el error "rake aborted! Could not find table"

Pero cuando voy a rastrillar db: migrate para inicializar la base de datos en la caja de ventanas, me sale el siguiente mensaje de error:

$ 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 

Mi lista de gemas se ve así:

$ 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) 

mi archivo schema.rb en la caja de Windows es el siguiente:

# 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 

Dado que esta es la primera vez que me he encontrado migraciones en esta máquina, esperaría que nada sobre el proceso de migración debería buscar acceder a la tabla 'proyectos' antes de que se cree. Pero me doy cuenta de que la tabla de "proyectos" no figura en schema.rb hasta después de varias tablas asociadas (activos, macroposts). ¿Es esa la fuente del problema?

¿O es algún tipo de problema de dependencia de la gema en el trabajo aquí? Noté que la gema 'faker' aparece en la parte superior de la lista de errores, aunque en realidad ni siquiera la utilizo excepto en mis pruebas (copiadas de RailsTutorial.org de Michael Hartl).

Gracias por cualquier ayuda o sugerencia que puedas ofrecer!

Dean Richardson Genlighten.com

Respuesta

0

podría querer intentar rake db:create También asegúrese de que sus archivos de configuración son correctos en señalar al servidor SQL que desea.

También asegúrese de que todos sus archivos de migración se vean bien y no tengan ningún error de sintaxis ni nada de eso.

+0

Los archivos environment.rb y database.yml parecen apuntar a sqlite3 y la gema sqlite3-ruby apropiada. Es posible que mis archivos sqlite3 sean de alguna manera incompatibles con mis otros archivos Rails, pero si es así, no es obvio cómo. Mis archivos de migración funcionan en otras máquinas, así que estoy bastante seguro de ellos. – hikari17

+0

Eliminé la base de datos de desarrollo vacía y ejecuté rake db: create como sugirió. No se ha planteado el error "No se pudo encontrar la tabla" esta vez. Luego traté de iniciar el servidor ("script/servidor de ruby") y obtuve otro volcado de error largo que comenzó con "no se pudieron encontrar los proyectos de la tabla". Así que el problema básico todavía está allí. – hikari17

+0

tiene que ejecutar migraciones después de crear el base de datos, entonces ejecutaría 'rake db: migrate' después de ejecutar' rake db: create' – Jimmy

13

Tuve este problema exacto en las últimas semanas en un proyecto paralelo en el que he estado trabajando. La respuesta solo se me hizo evidente cuando ejecuté rake db:migrate con --trace. Una vez allí noté que el seguimiento de la pila se quejaba de que factory_girl no podía crear una instancia del elemento de la tabla faltante.

Entré en mi archivo factory.rb y eliminé el modelo ofensivo y después de eso pude ejecutar rake db:migrate. Además, el problema para mí era:

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

En este caso, la fábrica dentro de la fábrica estaba tratando de insertar durante la tarea de rastrillo. Como la tabla no existía, explotó. Con un poco de ayuda encontré que la forma correcta de hacerlo es:

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

Gracias por eso. Ese fue exactamente mi problema, también. –

+1

Alguna idea de por qué factory girl debería estar haciendo algo como esto durante el esquema: cargar en primer lugar? No debería schema: cargar simplemente use database.yml y schema.rb? – bchurchill

5

Acabo de encontrar el mismo problema. rake db:create funcionaría, pero al ejecutar cualquier otra cosa, como rake db:schema:load o rake db:migrate, se produjo un error al faltar una tabla. La respuesta de Chris Hein me indicó la dirección correcta. Se hacía referencia a la tabla faltante en las especificaciones y, por algún motivo, se estaban cargando como parte del entorno antes de que se ejecutaran las tareas de rake. Acabo de mover la carpeta de especificaciones, ejecuté las tareas de rake y la moví hacia atrás.

+1

Eso fue exactamente lo que me sucedió. Así que después de lo que dijo comenté el código en un archivo inicializador (disculpe la ortografía británica) con un código que hace referencia a ese modelo, luego 'rake db: schema: load' (porque simplemente' rake db: mi rejilla' todavía estaba en problemas), y ¡voila !, funcionó. ¡Gracias! – mjnissim

0

Tenía un problema similar y tenía que ver con factory_girl como Chris señaló.De esta manera parece una manera más fácil de resolverlo:

En Gemfile, definir chica de la fábrica de esta manera:

gem 'factory_girl_rails', :require => false 

A continuación, en el archivo spec_helper.rb:

require 'factory_girl_rails' 

Aquí está el enlace a respuesta original: FactoryGirl screws up rake db:migrate process

Cuestiones relacionadas