2010-11-23 3 views
1

Я подтолкнул свое приложение к Heroku и теперь пытаюсь запустить '$ heroku rake db: migrate'. Я получаю эту ошибку:Ruby On Rails Heroku db: migrate Aborted!

PGError: ОШИБКА: отношение «запасов» не существует :. ВЫБРАТЬ «запасы» * FROM «запасов»

на моей локальной машине все отлично работает. Локальный использует SQLite 3. Кроме того, предыдущие версии приложения работали очень хорошо - предыдущие версии включали модель инвентаризации. Теперь я прочитал (почти) каждый пост в stackoverflow и в Интернете об этой проблеме, но я все еще не могу найти способ обойти его. Есть ли у кого-нибудь какие-либо советы по работе с этим?

Рубин 1.9.2 ROR 3

UPDATE .. Вот источник миграции, который создает таблицу кадастры:

class CreateInventories < ActiveRecord::Migration 
    def self.up 
    create_table :inventories do |t| 
     t.decimal :initial_amount, :precision => 10, :scale => 2 
     t.decimal :remaining_amount, :precision => 10, :scale => 2 
     t.string :unit 
     t.decimal :cost, :precision => 10, :scale => 2 
     t.integer :type_id 
     t.integer :brand_id 
     t.integer :blend_id 
     t.integer :user_id 
     t.boolean :in 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :inventories 
    end 
end 
+0

Ваше имя таблицы - это «инвентарь», а не «инвентарь?». – 2010-11-23 14:35:28

+0

Да, вот он в схеме: create_table "inventoryories",: force => true do | t | – 2010-11-23 16:00:08

ответ

1

РЕШЕНИЕ: Я, наконец, выяснил проблему. У меня был этот метод в моей модели пользователя:

def self.search(id) 
    @inventory = Inventory.where(:primary_user [id]) 
    @cups = Cup.where(:user_id [id]) 

    @inventory + @cups 
end 

По какой-то причине это вызвало ошибки. Я обновил его, чтобы вместо этого использовать @user.inventories и @user.cups. Спасибо всем.

1

Ошибка указывает на то, что таблица не существует удаленно. См. Следующее: http://docs.heroku.com/database#common-issues-migrating-to-postgresql

Я бы ожидал, что предыдущий db: migrate создаст таблицу, если изменения базы данных не произошли за пределами задачи rake db. Я нахожу, что довольно легко получить это от синхронизации. Вы можете выполнить определенные миграции, указав желаемый метод миграции (вверх или вниз) и отметку времени миграции, которую нужно выполнить. Пример:

heroku rake db:migrate:up VERSION=20101108092153 

Выполняется миграция, сгенерированная 11.08.2010 в 9:21:53. Вы можете просмотреть свои миграции в папке db /, чтобы найти миграцию, содержащую отсутствующую таблицу.

+0

Спасибо, что объяснили, как использовать версии. Я запускал эту строку на нескольких разных версиях, но все же получил ту же ошибку. Я вставил ошибку в комментарии выше. Я прочитал статью, на которую вы ссылались, и попытался запустить ActiveRecord :: Base.connection.tables , чтобы узнать, была ли создана таблица. У меня ошибка, говоря, что это была некорректная команда. Любые идеи о том, как отладить это? Благодарю. – 2010-11-23 16:11:40

1

Вы использовали модель инвентаризации в своей миграции? Может быть, у вас есть ошибка при переносе, например, вы редактировали файл миграции после переноса локальной базы данных?

В любом случае при запуске rake --trace db:migrate должно отображаться полное сообщение об ошибке вместе с трассировкой стека - вы найдете проблемную строку кода.

UPDATE:

В вашем трассировки стека (ссылка в комментарии) есть одна подозрительная линия:

...0-d4e1268c8981/mnt/config/environment.rb:5 

Какой код есть?

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