Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Postgresql对users表运行迁移时出现问题_Ruby On Rails_Ruby_Postgresql_Migration - Fatal编程技术网

Ruby on rails 使用Postgresql对users表运行迁移时出现问题

Ruby on rails 使用Postgresql对users表运行迁移时出现问题,ruby-on-rails,ruby,postgresql,migration,Ruby On Rails,Ruby,Postgresql,Migration,我正在尝试更新迁移中设置的新列的一些默认值。然而,每当我试图对users表的记录做任何事情时(除了修改其结构),我都会收到一个Postgres错误。我使用的是Rails 3.0.7、ruby 1.9.2和pg gem版本0.11.0 以下是迁移: def self.up add_column :users, :state_machine, :string add_column :users, :wizard_steps_completed, :integer, :default =>

我正在尝试更新迁移中设置的新列的一些默认值。然而,每当我试图对users表的记录做任何事情时(除了修改其结构),我都会收到一个Postgres错误。我使用的是Rails 3.0.7、ruby 1.9.2和pg gem版本0.11.0

以下是迁移:

def self.up
 add_column :users, :state_machine, :string
 add_column :users, :wizard_steps_completed, :integer, :default => "1"
 add_column :users, :activated_at, :datetime

 User.reset_column_information
 User.all.each do |u|
   u.update_attributes(:state_machine => "activated", :wizard_steps_completed => 3, :activated_at => u.created_at)
 end
end
添加列时没有问题。但是,对现有记录的更改都会失败,并出现以下错误:

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
==  AddUserSignupInfo: migrating ==============================================
rake aborted!
An error has occurred, this and all later migrations canceled:

PGError: ERROR:  current transaction is aborted, commands ignored until end of transaction block
:             SELECT COUNT(*)
            FROM pg_tables
            WHERE tablename = 'users'
如果我试图更新任何似乎有效的orecord,我只能进行结构更改


有什么想法吗?

打开postgres日志记录(在/var/lib/pgsql/data/postgresql.conf和grep中配置为“错误报告和日志记录”)。或者,您可能希望获取SQL并自己运行,以查看发生了什么错误。这可能是由于您的更新而失败的约束。

您的用户类对您的新属性做了什么有趣的事情吗?不,只是普通的。为了简化,我将更新移到了它们自己的迁移中,并更新为使用update_all,使其成为一个事务。它在控制台中工作。我猜某个地方正在触发数据库中的错误,然后捕获并更正它(例如,插入、违反唯一约束、捕获异常、执行更新),但这破坏了
db:migrate
事务。如果分两步做的话,我会继续做下去,继续做更有趣的事情。