2010-09-21 2 views
8

Я новичок в Rails, и я создаю простое приложение для отслеживания проектов для своего работодателя. Я разрабатываю приложение на своем Mac и подталкиваю его к github. Мне просто удалось клонировать мое github-репо в окно-окно за брандмауэром моей компании в надежде дать коллегам возможность попробовать приложение.rake db: migrate производит «rake aborted! Не удалось найти таблицу» 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 

Мой список драгоценных камней выглядит следующим образом:

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

Мой файл schema.rb в окне Windows выглядит так:

# 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 

Поскольку это первый раз, когда я запускал миграции на этой машине, я бы ожидал, что ничего о процессе миграции не будет пытаться получить доступ к таблице «проекты» до ее создания. Но я замечаю, что таблица «проекты» не указана в schema.rb до тех пор, пока несколько связанных с ней таблиц (активы, макропоты.) Является ли это источником проблемы?

Или какая-то проблема зависимости самоцвета на работе здесь? Я заметил, что «фейкер» появляется в верхней части списка ошибок, хотя я даже не использую его, кроме как в моих тестах (скопирован с RailsTutorial.org Майкла Хартла.)

Спасибо за любую помощь или предложения, которые вы можете предложить!

Дин Ричардсон Genlighten.com

ответ

0

могли бы хотеть, чтобы попытаться rake db:create также убедитесь, что ваши файлы конфигурации правильно указывает на сервер SQL вы хотите.

Также убедитесь, что все ваши файлы миграции выглядят хорошо и не имеют синтаксических ошибок или чего-либо подобного.

+0

Файлы environment.rb и database.yml, как кажется, указывают на sqlite3 и соответствующий камень sqlite3-ruby. Возможно, что мои файлы sqlite3 как-то несовместимы с моими другими файлами Rails, но если это так, то не очевидно. Мои файлы миграции работают на других машинах, поэтому я довольно уверен в них. – hikari17

+0

Я удалил пустую базу данных разработки и запустил rake db: создайте, как вы предложили. На этот раз ошибка «не могла найти таблицу». Затем я попытался запустить сервер («ruby script/server») и получил еще один длинный дамп ошибки, который начинался с «не удалось найти таблицы» проектов. Таким образом, основная проблема все еще существует. – hikari17

+0

вам нужно запускать миграции после создания базы данных, поэтому я буду запускать 'rake db: migrate' после запуска' rake db: create' – Jimmy

13

У меня была эта точная проблема в течение последних нескольких недель на побочном проекте, над которым я работал. Ответ мне только стал понятен, когда я запустил rake db:migrate с --trace.. Когда-то там я заметил, что трассировка стека жаловалась на то, что factory_girl не смог создать экземпляр отсутствующего элемента таблицы.

Я зашел в мой файл factory.rb и удалил оскорбительную модель, после чего смог запустить rake db:migrate. Кроме того, проблема для меня было:

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

В этом случае завод внутри завода был пытающегося вставить во время задачи граблей. Поскольку таблица еще не существовала, она взорвалась. С небольшой помощью я нашел, что правильный способ сделать это:

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

Спасибо для этого. Это тоже была моя проблема. –

+1

Любая идея, почему фабричная девушка должна делать что-то подобное во время схемы: загрузка в первую очередь? Не должна быть схема: загрузка просто использует database.yml и schema.rb? – bchurchill

5

Я только столкнулся с этой же проблемой. rake db:create будет работать, но работает что-нибудь еще, например rake db:schema:load или rake db:migrate, не удалось с ошибкой про недостающую таблицу. Ответ Криса Хейна указал мне в правильном направлении. Недопустимая таблица упоминалась в спецификациях, и по какой-то причине они загружались как часть среды до запуска задач рейка. Я просто переместил папку спецификаций, выполнил задачи грабли и переместил ее обратно.

+1

Это что произошло со мной, поэтому после того, как вы сказали, я прокомментировал код в файле инициализации (извините английскую орфографию) кодом, ссылающимся на эту модель, затем «rake db: schema: load» (потому что просто «rake db: mi решетка' все еще столкнулась с трудностями), и вуаля !, она сработала. Благодаря! – mjnissim

0

Был аналогичный вопрос, и это было связано с factory_girl, как указал Крис.Таким образом, кажется, более простой способ решить эту проблему:

В Gemfile, определить заводскую девушка, как это:

gem 'factory_girl_rails', :require => false 

Затем в spec_helper.rb файле:

require 'factory_girl_rails' 

Вот ссылка на Оригинальный ответ: FactoryGirl screws up rake db:migrate process

Смежные вопросы