Ruby on rails 3 Heroku PostgreSQL迁移问题

Ruby on rails 3 Heroku PostgreSQL迁移问题,ruby-on-rails-3,postgresql,heroku,Ruby On Rails 3,Postgresql,Heroku,我正在开发基于rails的网站的模型,并创建了一个名为ItemAttributes的模型类,该类为特定项目定义了一组有效属性。例如,“bed size”是“bed”项的一个属性。我还创建了一个AttributeValue类,该类定义了属性的有效值,如“king”、“queen”、“full”等 我试图用迁移来填充heroku上的PostgreSQL数据库,但它抛出了一个毫无帮助的错误(迁移在SQLite上本地工作): 以下是我正在使用的迁移: class AddBedSizeValues <

我正在开发基于rails的网站的模型,并创建了一个名为ItemAttributes的模型类,该类为特定项目定义了一组有效属性。例如,“bed size”是“bed”项的一个属性。我还创建了一个AttributeValue类,该类定义了属性的有效值,如“king”、“queen”、“full”等

我试图用迁移来填充heroku上的PostgreSQL数据库,但它抛出了一个毫无帮助的错误(迁移在SQLite上本地工作):

以下是我正在使用的迁移:

class AddBedSizeValues < ActiveRecord::Migration
  def self.up
    id = ItemAttribute.find_by_name('bed size').id

    AttributeValue.create(
      :name => 'king',
      :item_attribute_id => id
    )
    AttributeValue.create(
      :name => 'queen',
      :item_attribute_id => id
    )
    AttributeValue.create(
      :name => 'full',
      :item_attribute_id => id
    )
    AttributeValue.create(
      :name => 'x-long twin',
      :item_attribute_id => id
    )
    AttributeValue.create(
      :name => 'twin',
      :item_attribute_id => id
    )
  end
class addbestizevalues“国王”,
:item_属性_id=>id
)
AttributeValue.create(
:name=>queen',
:item_属性_id=>id
)
AttributeValue.create(
:name=>full',
:item_属性_id=>id
)
AttributeValue.create(
:name=>'x-long twin',
:item_属性_id=>id
)
AttributeValue.create(
:name=>“twin”,
:item_属性_id=>id
)
结束

当同一事务中出现早期错误时,会出现此错误。查找并解决该错误。如果预期会出现某些错误并且不希望回滚整个事务,则可以使用保存点

编辑,一些澄清

为了澄清,我看到流程中的错误的情况如下:

BEGIN; -- start of transaction
SOME QUERY; -- Causes error but error is ignored
SECOND QUERY; -- Causes the error you get because it is still in the same transaction
错误发生后,必须回滚事务并启动新事务,然后才能继续,或者必须回滚到保存点

可能是您遇到了导致此错误的其他条件,但可能您应该检查PGDATA/pgu log中的日志,以检查您的引擎是否记录了一些错误信息


如果这没有帮助,您可以尝试创建迁移期间执行的所有实际查询(而不是rails代码)的日志。

当同一事务中出现早期错误时,会出现此错误。查找并解决该错误。如果预期会出现某些错误并且不希望回滚整个事务,则可以使用保存点

编辑,一些澄清

为了澄清,我看到流程中的错误的情况如下:

BEGIN; -- start of transaction
SOME QUERY; -- Causes error but error is ignored
SECOND QUERY; -- Causes the error you get because it is still in the same transaction
错误发生后,必须回滚事务并启动新事务,然后才能继续,或者必须回滚到保存点

可能是您遇到了导致此错误的其他条件,但可能您应该检查PGDATA/pgu log中的日志,以检查您的引擎是否记录了一些错误信息


如果这没有帮助,您可以尝试创建一个日志,记录迁移过程中执行的所有实际查询(而不是rails代码)。

我不确定这是什么意思。我很确定在创建这些属性值之前没有错误。我已经将我的迁移缩减到上面创建的第一个,这仍然会导致错误。如果我删除了所有的创建,错误就会消失。澄清了我的帖子,希望它有帮助。我投票赞成这个答案,因为它帮助我解决了我的问题。这条毫无帮助的消息实际上是由于一个被忽略的错误,然后是另一个错误。为了找出问题所在,我建议:1。查看您的log/development.log文件,该文件将为您提供所需的大部分信息(例如SQL请求,您甚至可以使用简单的
puts
在迁移中插入一些跟踪),如果这还不够,您可能需要查看您的PostgreSQL数据库日志(我正在使用本地PG服务器,但不知道您是否可以在Heroku上执行此操作)。我不知道你说的是什么意思。我很确定在创建这些属性值之前没有错误。我已经精简了我的迁移到上面的第一个创建,这仍然会导致错误。如果我删除所有创建,错误就会消失。澄清了我的帖子,希望它有帮助。我投票赞成这个答案,因为它是正确的帮助我解决了我的问题。事实上,这条没有帮助的消息是由于一个被忽略的错误,然后是另一个错误。要确定问题,我建议:1.查看日志/development.log文件,它将为您提供所需的大部分信息(例如,SQL请求,您甚至可以使用简单的
puts
)在迁移中插入一些跟踪,如果这还不够,您可能需要查看您的PostgreSQL数据库日志(我使用的是本地PG服务器,但不知道您是否可以在Heroku上执行此操作)。我尝试删除所有“创建”在这次迁移中,它顺利地完成了。一旦我在迁移中只添加了一个create,同样的错误就会返回。Heroku开发人员最痛苦的事情是在本地使用SQLite。PostgreSQL是免费的。下载它,安装它,然后停止使用SQLite。我尝试删除所有的“creates”在这次迁移中,它顺利完成了。一旦我在迁移中只添加了一个create,同样的错误就会返回。Heroku开发人员最头疼的问题是在本地使用SQLite。PostgreSQL是免费的。下载它,安装它,然后停止使用SQLite。