我正在开发一个Rails 4.2.5应用程序,允许使用回形针上传视频。除了非常大的文件,它工作得很好。使用超过3GB的视频时,会出现以下错误:

RangeError (3283091012 is out of range for ActiveRecord::Type::Integer with limit 4)

现在我可以知道3283091012是文件的大小,所以我认为当MySQL试图为paperclip创建的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所声称的错误。
知道是什么原因吗?
注意:我对模型没有任何奇特的验证(只是强制存在两个属性),控制器操作是一个常规的创建操作。

最佳答案

根据MYSQL文档,整数的范围是-2147483648到+2147483647。所以你的号码对这类人来说太大了。
更新列并使用参数限制来指示您想要bigint。

class ChangeIntegerLimitInYourTable < ActiveRecord::Migration
  def change
    update_column :your_table, :your_column, :integer, limit: 8
  end
end

关于mysql - Rails +回形针RangeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34477248/

10-12 12:52
查看更多