Bri*_*ian 4 deployment ruby-on-rails heroku ruby-on-rails-3
所以我的应用程序工作正常.我创建了一个新模型和一些关联,使我的heroku app中的所有旧种子数据都无用.所以我试图重置它并再次填充它.但是我甚至无法使用heroku rake db:migrate命令将我的数据库迁移到heroku .我正在使用SQLite,但似乎我的错误与Postgres有关.我不知道这意味着什么,如果有的话
这是错误:
rake aborted!
An error has occurred, this and all later migrations canceled:
PGError: ERROR: column "to" cannot be cast to type "pg_catalog.int4"
: ALTER TABLE "emails" ALTER COLUMN "to" TYPE integer
Tasks: TOP => db:migrate
Run Code Online (Sandbox Code Playgroud)
我的迁移:
class ChangeDataTypeForEmailUsers < ActiveRecord::Migration
def self.up
change_column :emails, :to, :integer
change_column :emails, :from, :integer
end
def self.down
change_column :to, :string
change_column :from, :string
end
end
Run Code Online (Sandbox Code Playgroud)
问题是什么?我部署的应用程序工作正常.我添加了一个新模型,并认为我应该重置已部署的数据库.所以我跑了heroku pg:reset然后把我的代码推到了heroku.然后尝试迁移数据库,但它不起作用!我做了什么?在过去的4个小时里,我一直试图解决这个问题.我不能再思考了.任何帮助将不胜感激
继Hishalv的回答.如果您不能使用"change_column",那么您可以采用迂回方式:
def self.up
rename_column :emails, :to, :old_to
add_column :emails, :to, :integer
Email.reset_column_information
Email.all.each {|e| e.update_attribute(:to, e.old_to.to_i) }
remove_column :emails, :old_to
end
Run Code Online (Sandbox Code Playgroud)
这是环形交叉路口,Email.all.each可能会很慢 - 但它会为你工作和正确投射.
如果您只是在prod上使用它,那么您可以使用SQL UPDATE命令替换ruby-updates,该命令使用POSTGRES特定的强制转换方法在数据库中执行相同的操作.
| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |