“堆栈级别太深";处理嵌套形式的载波图像版本时 [英] "stack level too deep" When Processing Carrierwave Image Versions in Nested Form

查看:95
本文介绍了“堆栈级别太深";处理嵌套形式的载波图像版本时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个奇怪的问题,不幸的是,它有很多潜在的来源.我正在使用载波和茧状宝石来帮助嵌套文件上传.我在上传器中执行的任何类型的版本处理都会导致堆栈级别过深的错误.如果删除该处理,它将正常保存嵌套图像.我已经尝试了很多故障排除,并将其范围缩小到了;例如,如果我仅删除版本处理,则它可以正常工作.如果删除除版本处理之外的所有内容,则会引发相同的错误.有很多潜在的来源,所以这里有一些代码:

This is a strange problem and, unfortunately, it has many potential sources. I am using carrierwave and cocoon gems to help with nested file uploads. Any type of version processing I do in my uploader causes a stack level too deep error. If I remove the processing, it saves the nested images normally. I have tried to do a lot of troubleshooting and have narrowed it down to that; for example, if I remove just the version processing, then it works normally. If I remove everything except the version processing, it throws the same error. There is a lot of potential source, so here is some code:

父表单(已截断)

<%= semantic_form_for [@object, @discussion], multipart: true , input_html: {class: "form-horizontal"} do |f| %>
     <div id="pictures">
      <%= f.semantic_fields_for :pictures do |p| %>
        <%= render 'picture_fields', :f => p %>
      <% end %>
      <div class="links">
        <%= link_to_add_association f, :pictures do %>
          <button type="button" class="btn btn-success btn-sm">Add Image</button>
        <% end %>
      </div>
    </div>
 <% end %>

嵌套表格

<div class="nested-fields">
 <div class="row">
  <div class="col-md-10">
    <%= f.input :pic, label: false %>
    <%= f.input :pic_cache, as: :hidden %>    
  </div>
  <div class="col-md-2 pull-right">
    <%= link_to_remove_association f do %>
     <button type="button" class="btn btn-danger btn-sm">REMOVE</button>
    <% end %>
   </div>
  </div>
 </div>

上载器

        # encoding: utf-8

class ImageUploader < CarrierWave::Uploader::Base

  # Include RMagick or MiniMagick support:
  include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
  # include Sprockets::Helpers::RailsHelper
  # include Sprockets::Helpers::IsolatedHelper

  # Choose what kind of storage to use for this uploader:
  # storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    if Rails.env.test?
      "uploads/test/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
    else
      "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
    end
  end

  #custom method to access local files as full paths
  def local_path_or_remote_url
    if CarrierWave::Uploader::Base.storage.to_s == CarrierWave::Uploader::Base.storage_engines[:file]
      path
    else
      url
    end
  end

  # Process files as they are uploaded:
  # process :scale => [200, 300]
  #
  # def scale(width, height)
  #   # do something
  # end

  # Create different versions of your uploaded files:
  process :resize_to_fit => [400, 400]

  version :thumb do
    process :resize_to_fill => [72, 72]
  end


  # Add a white list of extensions which are allowed to be uploaded.
  # For images you might use something like this:
  def extension_white_list
     %w(jpg jpeg gif png)
  end

  # Override the filename of the uploaded files:
  # Avoid using model.id or version_name here, see uploader/store.rb for details.
  def filename
    "pic#{File.extname(original_filename).downcase}" if original_filename
  end

end

我有一些上传者使用基本上相同的代码而没有问题.仅通过嵌套,此版本控制代码才会出现问题.我知道可能有很多潜在的来源.有什么想法吗?

I have uploaders that use essentially the same code without problems. It's only with the nesting that this versioning code has problems. I know there can be a lot of potential sources for this. Any ideas?

推荐答案

这对我有用.

gem 'rmagick', :require => 'RMagick'

这篇关于“堆栈级别太深";处理嵌套形式的载波图像版本时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆