我正在使用Rails 4.2.5应用程序,该应用程序允许使用Paperclip上传视频。除非常大的文件外,它工作正常。使用超过3GB的视频时,出现以下错误:
RangeError (3283091012 is out of range for ActiveRecord::Type::Integer with limit 4)
现在我可以说出3283091012
文件的大小,所以我认为这是在MySQL尝试保存file_size
回形针创建的字段的值时发生的,我可以通过增加数据库中的限制甚至使用迁移文件来更好地解决该问题,但是我认为我之前会检查表结构,而我对以下内容感到惊讶:
mysql> describe formats;
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| video_id | int(11) | YES | MUL | NULL | |
| name | varchar(255) | YES | | NULL | |
| quality | varchar(255) | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
| file_file_name | varchar(255) | YES | | NULL | |
| file_content_type | varchar(255) | YES | | NULL | |
| file_file_size | int(11) | YES | | NULL | |
| file_updated_at | datetime | YES | | NULL | |
| trailer | tinyint(1) | YES | | 0 | |
+-------------------+--------------+------+-----+---------+----------------+
如您所见,错误所声明file_file_size
的int(11)
不是4。知道是什么原因造成的吗?
注意:我没有对模型进行任何花哨的验证(只是强制存在几个属性),并且控制器操作是常规的create操作。
作为Srv的答案,undefined method 'update_column'
在运行迁移时给了我一个错误,但这有效:
class ChangeIntegerLimitInFormats < ActiveRecord::Migration
def self.up
change_table :formats do |t|
t.change :file_file_size, :integer, limit: 8
end
end
def self.down
change_table :formats do |t|
t.change :file_file_size, :integer, limit: 4
end
end
end
运行迁移后检查表结构表明该列file_file_size
现在是以前Int(20)
的Int(11)
样子,不确定该如何将4转换为11,将8转换为20,这是造成混淆的根源(如果有人)有相关信息,请添加评论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句