Ruby on rails 查找'的原因;堆栈级别太深';销毁文件时在Carrierwave中

Ruby on rails 查找'的原因;堆栈级别太深';销毁文件时在Carrierwave中,ruby-on-rails,ruby-on-rails-4,carrierwave,Ruby On Rails,Ruby On Rails 4,Carrierwave,我不知道如何发布这个问题,所以我把它扔到这里: 我在多态附件模型上使用Carrierwave: class Attachment < ActiveRecord::Base mount_uploader :file, AttachmentUploader, :mount_on => :file_name belongs_to :attachable, :polymorphic => true before_save :update_file_attributes

我不知道如何发布这个问题,所以我把它扔到这里:

我在多态附件模型上使用Carrierwave:

class Attachment < ActiveRecord::Base
  mount_uploader :file, AttachmentUploader, :mount_on => :file_name

  belongs_to :attachable, :polymorphic => true

  before_save :update_file_attributes

  validates :file, file_size: { maximum: 15.megabytes.to_i }

  private

    def update_file_attributes
      if file.present? && file_name_changed?
        self.digest = Digest::MD5.new.file(file.file.path).hexdigest
      end
    end
end
我的上传程序创建了两个版本:(基于中的代码)

起初我认为这与
接受
的嵌套属性有关,但运行
Attachment.first.destroy产生了相同的结果

所以我的问题是,当
SystemStackError
没有显示跟踪时,应该如何调试它呢?

事实证明,这可能是误导性的

我假设
model.file.file.extension
也可以用在
full\u filename
中。原来它不能:
model.file.file
使用
full\u文件名
获取文件名。这是在创建一个无限循环,因此是一个SystemStackError

我选择的解决方案是一个简单的
文件。extname

class AttachmentUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  storage :file

  def store_dir
    "uploads/projects/#{model.attachable.project.to_param}/attachments/#{model.id}/#{model.digest}/"
  end

  version :large do
    process resize_to_fit: [700, 700]
    def full_filename (for_file = model.file.file)
      "large#{File.extname(for_file)}"
    end
  end

  version :thumbnail, from_version: :large do
    process resize_to_fill: [250, 250]
    def full_filename (for_file = model.file.file.extension)
      "thumbnail#{File.extname(for_file)}"
    end
  end
end
类AttachmentUploader
class AttachmentUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  storage :file

  def store_dir
    "uploads/projects/#{model.attachable.project.to_param}/attachments/#{model.id}/#{model.digest}/"
  end

  version :large do
    process resize_to_fit: [700, 700]
    def full_filename (for_file = model.file.file)
      "large.#{model.file.file.extension}"
    end
  end

  version :thumbnail, from_version: :large do
    process resize_to_fill: [250, 250]
    def full_filename (for_file = model.file.file.extension)
      "thumbnail.#{model.file.file.extension}"
    end
  end
end
SystemStackError (stack level too deep):
  actionpack (4.0.4) lib/action_dispatch/middleware/reloader.rb:70
class AttachmentUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  storage :file

  def store_dir
    "uploads/projects/#{model.attachable.project.to_param}/attachments/#{model.id}/#{model.digest}/"
  end

  version :large do
    process resize_to_fit: [700, 700]
    def full_filename (for_file = model.file.file)
      "large#{File.extname(for_file)}"
    end
  end

  version :thumbnail, from_version: :large do
    process resize_to_fill: [250, 250]
    def full_filename (for_file = model.file.file.extension)
      "thumbnail#{File.extname(for_file)}"
    end
  end
end