Migracje - undefined method

Cześć, próbuję wykonać taką migrację:

[code] create_table :city_districts do |t|
t.string :name
t.integer :city_id
t.timestamps
end
add_index :city_districts, [:name, :city_id], :unique => true

add_column :businesses, :city_district_id, :integer

CityDistrict.reset_column_information
Business.reset_column_information

Business.find_each do |business|
  # some code
end[/code]

i dostaję tego typu błąd:

StandardError: An error has occurred, all later migrations canceled: undefined method `each' for nil:NilClass

w linijce:

Business.find_each

To samo jest kiedy zamienię tą linijkę na:

Business.all.each

Problem polega na tym, że migracja przechodzi na niektórych maszynach, a na niektórych nie. Nie mam już pomysłu co może być nie tak. Myślałem nad tym, czy przypadkiem:

Business.reset_column_information

nie powoduje jakiegoś błędu.

Załączę też końcówkę backtrace’u:

[GEM_ROOT]/gems/mysql2-0.2.13/lib/active_record/connection_adapters/mysql2_adapter.rb:586:in `select' [GEM_ROOT]/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all' [GEM_ROOT]/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract/query_cache.rb:56:in `select_all' [GEM_ROOT]/gems/activerecord-3.0.10/lib/active_record/base.rb:473:in `find_by_sql' [GEM_ROOT]/gems/newrelic_rpm-3.1.1/lib/new_relic/agent/method_tracer.rb:491:in `block in find_by_sql_with_trace_ActiveRecord_self_name_find_by_sql' [GEM_ROOT]/gems/newrelic_rpm-3.1.1/lib/new_relic/agent/method_tracer.rb:242:in `trace_execution_scoped' [GEM_ROOT]/gems/newrelic_rpm-3.1.1/lib/new_relic/agent/method_tracer.rb:486:in `find_by_sql_with_trace_ActiveRecord_self_name_find_by_sql' [GEM_ROOT]/gems/activerecord-3.0.10/lib/active_record/relation.rb:64:in `to_a' [GEM_ROOT]/gems/activerecord-3.0.10/lib/active_record/relation/finder_methods.rb:143:in `all' [GEM_ROOT]/gems/activerecord-3.0.10/lib/active_record/base.rb:444:in `all' db/migrate/20111104085756_create_city_districts.rb:16:in `up'
Jeżeli macie jakieś pomysły, spotkaliście się z podobnym problemem to podrzućcie jakąś radę.

Zrób z tego dwie osobne migracje. Sprawdź na wszystkich maszynach, czy w railsowej konsoli “Business.all” działa. Może w ten sposób ustalisz więcej.

A najlepiej nie używaj modeli w migracjach, bo to zło.
Więcej info - http://complicated-simplicity.com/2010/05/using-models-in-rails-migrations/

Dzięki za odpowiedzi. Problem nie leżał w samej migracji ale w pewnym skrypcie:
rake db:replicate db:migrate

Po wykonaniu replicate trzeba by było przeładować wszystkie modele więc rozdzieliłem po prostu na dwa polecenia:
rake db:replicate && rake db:migrate

Użycie SQL’a też byłoby dobrym pomysłem, tak miałem zrobić :slight_smile:
Dzięki za odpowiedzi.