Ruby on rails PGError:ERROR:relation";表“U名称”;不存在

Ruby on rails PGError:ERROR:relation";表“U名称”;不存在,ruby-on-rails,ruby,ruby-on-rails-3,postgresql,heroku,Ruby On Rails,Ruby,Ruby On Rails 3,Postgresql,Heroku,我正在尝试将一个简单的应用程序推送到heroku并运行: 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

我正在尝试将一个简单的应用程序推送到heroku并运行:

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
提前感谢您的帮助

---更新---

我感到困惑的主要原因是,这一切都是在本地进行的,而不是在heroku上运行迁移时

下面是我现在得到的错误:

rake aborted!
Please install the postgresql adapter: `gem install activerecord-postgresql-adapter` (pg is not part of the bundle. Add it to Gemfile.)
我一直在研究这个问题:

我几乎可以肯定我的database.yml不应该是这样的(因为我需要运行postgresql!!!):

对这里的无礼表示严重的歉意。提前感谢您的帮助

还尝试了以下链接:


难道你没有忘记
s
?表名应该是复数。

罗宾可能是对的,但以防万一

检查迁移的文件名/时间戳。这些是按顺序运行的。我遇到了一个问题,进行迁移的生成器将外部表放在第一位……我切换了文件名,结果成功了


这是一个很难解决的问题,但我想我应该把它说出来。

我也有类似的问题,但这不是由迁移或GEM文件引起的。我在多态关系中设置了4个模型。删除该语句

belongs_to :assetable, :polymorphic => true, :dependent => :destroy
删除子类“
acts\u as”
声明足以使
db:migrate
成功完成。然后我在模型中添加了语句,一切都很好。我不太清楚为什么会这样,但如果你处于类似的情况下,这可能会暂时有所帮助,直到更好的解决方案出现


我的情况是在一个父对象和3个对象之间使用多态多表继承方案作为基线

在我的例子中,我在迁移中执行了
重命名_table
,之前我已经修改了模型名以反映新的表名。我已将
User
移动到
User::User
users
表需要重命名为
user\u 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/user.rb
后者包含
User::User
模型,前者只包含

module User
  def self.table_name_prefix
    "user_"
  end
end

正是新添加的
User
模块中的这个类方法在运行
rake db:migrate
时给了我
PGError
,就像OP一样。在我运行迁移时临时删除这个类方法可以使迁移顺利运行。

我刚刚运行:
bundle exec rake db:migrate
,它起作用了

如果您使用的是ActiveAdmin,无论PG说的哪个表不存在,请注释掉ActiveAdmin rb文件的内容


例如,在这种情况下,
PGError:ERROR:relation“posts”不存在
,请注释掉
app/admin/posts.rb的全部内容,然后在完成迁移后取消注释。

我也遇到了同样的问题。我运行了heroku运行rake db:migrate,这就解决了问题。

gem'pg'应该在group:assets块之外,我认为这与此无关。您是否尝试过heroku rake db:setup
?herokuSorry的GEM文件中不需要pg,这是一个早期的实验,用于查看复数是否影响它。有相同的问题。。rake db:安装程序会删除所有现有数据吗?我猜在创建模型类后面的表之前,与多态关联相关的东西正在尝试加载模型类。问题中的SQL是AR用来计算表的模式的东西。在这种情况下,ActiveAdmin有时是罪魁祸首。有趣的是,我正在使用ActiveAdmin。到目前为止,我还不知道ActiveAdmin在这方面起到了什么作用,特别是在db:migration中。我很确定ActiveAdmin会尝试在应用程序初始值设定项中预加载一些内容,并且初始化会在db:migrate之前进行。我不知道ActiveAdmin的某些部分或模型关联触发了这个问题,但是人们已经通过暂时禁用ActiveAdmin解决了类似的问题。谢谢,这是因为meThis对我不起作用。另外,您会注释掉模型文件的哪些部分?
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
module User
  def self.table_name_prefix
    "user_"
  end
end