2010-09-21 16 views
8

Jestem nowy w Rails i buduję prostą aplikację do śledzenia projektu dla mojego pracodawcy. Rozwijam aplikację na moim Macu i popycham ją do github. Właśnie udało mi się sklonować moje repozytorium github do okna z okienkiem za firewallem mojej firmy, mając nadzieję, że koledzy wypróbują aplikację.rake db: migrate wyświetla "rake Aborted! Could not find table" error

Ale kiedy idę do rake db: migrować do inicjalizacji bazy danych na pole okien, otrzymuję następujące komunikaty o błędach:

$ 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 

Moja lista perełki wygląda następująco:

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

Mój plik schema.rb w oknie Windows wygląda następująco:

# 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 

Ponieważ to pierwszy raz, kiedy biegnę migracji na tym komputerze, oczekiwałbym, że nic w procesie migracji nie będzie próbowało uzyskać dostępu do tabeli projektów przed jej utworzeniem. Ale zauważam, że tabela "projekty" nie jest wymieniona w schema.rb aż po kilka tabel, które są z nią powiązane (zasoby, makroposty). Czy to jest źródło problemu?

Czy jest tu jakiś rodzaj problemu zależności klejnotów? Zauważyłem, że klejnot "fake'a" pojawia się w górnej części listy błędów, nawet jeśli tak naprawdę nie korzystam z niego poza testami (skopiowanymi z RailsTutorial.org Michaela Hartla).

Dzięki za każda pomoc lub sugestie, które możesz zaoferować!

Dean Richardson Genlighten.com

Odpowiedz

0

chcieć spróbować rake db:create również upewnić się, że pliki konfiguracyjne są prawidłowe, wskazując na serwerze sql chcesz.

Upewnij się także, że wszystkie pliki migracyjne wyglądają dobrze i nie zawierają błędów składni ani niczego w tym stylu.

+0

Pliki environment.rb i database.yml wydają się wskazywać na sqlite3 i odpowiedni klejnot sqlite3-ruby. Możliwe, że moje pliki sqlite3 są w jakiś sposób niezgodne z moimi innymi plikami Rails, ale jeśli tak, to nie jest to oczywiste. Moje pliki migracji działają na innych komputerach, więc jestem całkiem pewny ich. – hikari17

+0

Usunąłem pustą bazę danych wywoływania i uruchomiłem prowizję db: utwórz zgodnie z sugestią. Nie pojawił się błąd "nie mógł znaleźć tabeli". Następnie próbowałem uruchomić serwer ("skrypt ruby ​​/ serwer") i otrzymałem kolejny długi zrzut błędu, który zaczynał się od "nie mógł znaleźć tabel" projektów. "Więc podstawowy problem nadal istnieje – hikari17

+0

musisz uruchomić migracje po utworzeniu bazy danych, tak bym uruchomił 'rake db: migrate' po uruchomieniu' rake db: create' – Jimmy

13

Miałem ten problem przez ostatnie kilka tygodni w pobocznym projekcie, nad którym pracowałem. Odpowiedź stała się dla mnie jasna dopiero po uruchomieniu rake db:migrate z --trace. Po tym zauważyłem, że ślad stosu narzekał na to, że factory_girl nie może utworzyć wystąpienia brakującego elementu tabeli.

Poszedłem do pliku factory.rb i usunąłem szkodliwy model, a następnie udało mi się uruchomić rake db:migrate. Ponadto problemem dla mnie było:

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

w tym przypadku fabryka w fabryce usiłował włożyć podczas zadania natarcia. Ponieważ stół jeszcze nie istniał, wybuchł. Z małą pomocą stwierdziłem, że właściwym sposobem jest:

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

To był dokładnie mój problem, –

+1

Każdy pomysł, dlaczego fabryka powinna robić coś podobnego podczas schematu: ładowanie w pierwszej kolejności? Nie powinien schematu: ładuj tylko użyj database.yml i schema.rb? – bchurchill

5

Właśnie napotkałem ten sam problem. rake db:create będzie działał, ale uruchomienie czegokolwiek innego, na przykład rake db:schema:load lub rake db:migrate, nie powiedzie się z powodu błędu dotyczącego brakującej tabeli. Odpowiedź Chrisa Heina wskazała mi właściwy kierunek. Brakująca tabela była przywoływana w specyfikacjach i z jakiegoś powodu były ładowane jako część środowiska przed uruchomieniem zadań rake. Właśnie przeniosłem folder specyfikacji, uruchomiłem zadania rake i przeniesiono je z powrotem.

+1

To Więc po tym, co powiedziałeś, skomentowałem kod w pliku inicjalizacyjnym (przepraszam brytyjską pisownię) kodem odwołującym się do tego modelu, następnie 'rake db: schema: load' (ponieważ just' rake db: mi grate' nadal boryka się z problemami), i voila !, działało. Dzięki! – mjnissim

0

Miał podobny problem i miało to związek z factory_girl, jak zauważył Chris.W ten sposób wydaje się łatwiejszy sposób go rozwiązać:

W Gemfile zdefiniować Dziewczyna z fabryki tak:

gem 'factory_girl_rails', :require => false 

Następnie w pliku spec_helper.rb:

require 'factory_girl_rails' 

Oto link do oryginalna odpowiedź: FactoryGirl screws up rake db:migrate process

Powiązane problemy