PGError: ERROR: отношение "имя_таблицы" не существует - PullRequest
9 голосов
/ 06 декабря 2011

Я пытаюсь запустить простое приложение до героку и запустить:

heroku rake db:migrate

Но я получаю следующую ошибку:

rake aborted!
PGError: ERROR:  relation "posts" does not exist
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
              FROM pg_attribute a LEFT JOIN pg_attrdef d
                ON a.attrelid = d.adrelid AND a.attnum = d.adnum
             WHERE a.attrelid = '"posts"'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum

Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

Моя миграция выглядит так:

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :source
      t.string :tweetid
      t.string :pure
      t.string :media
      t.string :destination
      t.datetime :time
      t.timestamps
    end
  end
end

И, после ссылки на другой SO-ответ, я включил в свой Gemfile следующее:

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.1.4'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
  gem 'pg'
end

Заранее благодарю за любую помощь!

--- ОБНОВЛЕНИЕ ---

Основная причина, по которой я запутался, заключается в том, что все это работает локально, а не когда я запускаю миграцию на heroku.

Вот ошибка, которую я получаю сейчас:

rake aborted!
Please install the postgresql adapter: `gem install activerecord-postgresql-adapter` (pg is not part of the bundle. Add it to Gemfile.)

Я смотрел на этот вопрос:

Ошибка Heroku при запуске приложения rails3.1, отсутствует драгоценный камень postgres

Я почти уверен, что мой database.yml не должен выглядеть так (учитывая, что мне нужно запустить postgresql !!!):

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

Серьезные извинения за эту наглость здесь. Заранее спасибо за помощь!

Также пробовал эту ссылку: Загрузка в Heroku DB грабли: проблема с миграцией

Ответы [ 7 ]

15 голосов
/ 06 декабря 2011
create_table :posts

Разве вы не забыли s?Имена таблиц должны быть во множественном числе.

11 голосов
/ 07 декабря 2012

Я только что побежал: bundle exec rake db:migrate и это сработало

4 голосов
/ 10 февраля 2012

У меня была похожая проблема, но она не была вызвана миграцией или Gemfile.У меня было 4 модели в полиморфных отношениях.Удаление оператора

belongs_to :assetable, :polymorphic => true, :dependent => :destroy

и удаление объявлений подкласса 'acts_as_* было достаточно для успешного завершения db:migrate.Затем я добавил утверждения в моделях, и все работало замечательно.Я не совсем уверен, почему это так, но если вы находитесь в подобной ситуации, это может помочь временно, пока не появится лучшее решение.

Моя ситуация - полиморфная схема наследования нескольких таблиц между одним родителем и3 объекта, используя http://mediumexposure.com/multiple-table-inheritance-active-record/ в качестве базовой линии.

3 голосов
/ 02 декабря 2013

Если вы используете ActiveAdmin, какую бы таблицу PG ни указала, закомментируйте содержимое этого rb-файла ActiveAdmin.

Например, для этого случая PGError: ERROR: relation "posts" does not exist закомментируйте все содержимое app/admin/posts.rb, а затем раскомментируйте после завершения миграции.

1 голос
/ 06 декабря 2011

Робин, наверное, правильно, но на всякий случай ...

Проверьте имя файла / временные метки в ваших миграциях. Они запускаются в последовательности. У меня была проблема, когда генератор, который сделал мои миграции, сначала помещал чужую таблицу ... Я переключил имена файлов, и это сработало.

Это длинный выстрел, но я думал, что выложу это туда.

0 голосов
/ 11 декабря 2014

У меня была такая же проблема. Я запустил heroku run rake db:migrate, и это решило проблему.

0 голосов
/ 14 июня 2012

В моем случае я выполнял rename_table в своей миграции после того, как уже изменил имя моей модели, чтобы отразить новое имя таблицы. Я перешел User в User::User. Таблицу users нужно было переименовать в user_users, поэтому моя миграция выглядела как

class RenameUsersTableWithPrefix < ActiveRecord::Migration
  def up
    rename_table :users, :user_users
  end

  def down
    rename_table :user_users, :users
  end
end

Вместо

app/models/user.rb

У меня сейчас было

app/models/user.rb
app/models/user/user.rb

с последним, содержащим модель User::User, и первым, содержащим просто

module User
  def self.table_name_prefix
    "user_"
  end
end

Именно этот метод класса во вновь добавленном модуле User давал мне PGError при запуске rake db:migrate, как это было с OP. Временное удаление этого метода класса во время выполнения миграции позволило легко выполнить миграцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...