Lamerski problem, rake db:migrate

Robie wszystko po kolei tak jak jest w “Agile …” i na samym początku tworzenia aplikacji muszę stworzyć plik migration i wpisać do niego:

class AddPrice < ActiveRecord::Migration def self.up add_column :products, :price, :decimal, :precision => 8, :scale => 2, :default => 0 end def self.down remove_column :products, :price end end
no i wszystko ok, wpisuję rake db:migrate i…

[code](in /home/kuba/Desktop/work/depot)
== AddPrice: migrating ========================================================
–add_column(:product, :price, :decimal,
{:default=>0, :precision=>8, :scale=>2})
rake aborted!
You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occured while evaluating nil.[]

(See full trace by running task with --trace)[/code]
Sprawdzałem z 5 razy i wszystko jest tak jak w książce. Dopiero zaczynam z Ruby i nie wiem co ten błąd oznacza…

Błąd najpewniej nie występuje w samym pliku migracji tylko gdzieś indziej. Wiem, że może się to wydawać dziwne, ale przy migracji ładowane jest całe środowisko (dzięki temu w migracjach możesz nie tylko dodawać/usuwać tabele/kolumny, ale również np. wyliczać ich wartości na podstawie istniejących danych).

Sprawdź pozostałe pliki, które tworzyłeś, w szczególności pod kątem wykorzystania tablic (błąd, który się pojawia dotyczy tego, że wywoływany jest operator indeksowania [] na obiekcie nil). Na Twoim miejscu zajrzałbym przede wszystkim do config/environment.rb albo gdzieś w te okolice.
Spróbuj odpalić migrację z flagą --trace - tylko prośba, nie wrzucaj całego wyniku na forum. Co najwyżej kilka najwyższych linijek.

czesc rubyfan

Poniewaz zainstalowales niedawno railsy -> wiec masz wersje 1.2.5

sprawdz w pliku environment.rb czy masz tam wpis:

RAILS_GEM_VERSION = “1.2.5”

jezeli nie - to popraw na 1.2.5 i powinno dzialac!

goodluck!

Mam w tym pliku między innymi taką linię:

# Specifies gem version of Rails to use when vendor/rails is not #present <%= '# ' if freeze %>RAILS_GEM_VERSION = '<%= Rails::VERSION::STRING %>' unless defined? RAILS_GEM_VERSION
Mam tylko po = wpisać 1.2.5??

Tak, wpisz tylko:
RAILS_GEM_VERSION = ‘1.2.5’ unless defined? RAILS_GEM_VERSION

Szczerze mówiąc nie wydaje mi się, żeby mu to pomogło. Jeśli zainstalował wersję 1.2.5, to w momencie wygenerowanie szkieletu aplikacji i tak będzie miał wpis “RAILS_GEM_VERSION = ‘1.2.5’ unless defined? RAILS_GEM_VERSION” w tym pliku. No ale niech wpierw sprawdzi to co mu doradzacie, a potem będziemy kombinować.

A masz skonfigurowane bazy danych w database.yml yyy :> ?

@JO nie chcę być uszczypliwy, ale gdybyś zajrzał do “Agile…”, to przekonałbyś się, że migracja, o której pisze rubyfan, jest druga w kolejności, więc gdyby chodziło tylko o bazę danych, to problem pojawiłby się wcześniej.

Nie czytalem Agile… :slight_smile: przepraszam

witam, mam identyczny problem jak rubyfan, dopiero zaczynam z rails i nie moge przejść przez ten rok i szczerze mówiąc troche mnie to juz dobija, bo cały dzień nad tym siedze, uzywłem juz InstantRails 1.2, 1.3, 1.4, 1.5 , muszę to przeskoczyć bo mam duża determinacje pojąć Rubiego i RoR, ale chyba bez Waszej pomocy mi się nie uda :frowning: Help :smiley:

  • Po pierwsze dlaczego brniesz w gałąź 1.2.x (InstantRails < 1.5)? Nie ma sensu tracić na to czasu, zwłaszcza, że różnice do wersji 2.x.x są bardziej rewolucyjne niż ewolucyjne. Szkoda na to czasu, poszukaj sobie Agile… w wersji 3 beta.
  • Po drugie w której wersji stworzyłeś projekt? jeśli w IR1.2, a potem przeszedłeś na wyższe rozwiązaniem jest environment.rb
  • Po trzecie nie znam IR więc niestety więcej Ci nie pomogę