【问题标题】:Error when using CarrierWave使用 CarrierWave 时出错
【发布时间】:2012-07-29 11:18:05
【问题描述】:

我正在尝试将CarrierWaveDirect gem 与CarrierWave gem 结合使用,但在呈现直接上传表单时出现错误。这是在开发中,还没有在生产中尝试过。这是表格:

/app/views/users/registrations/edit.html.erb

<%= direct_upload_form_for @uploader do |f| %>
    <%= f.file_field :image %>
    <%= f.submit %>
<% end %>

错误出现在&lt;%= direct_upload_form_for @uploader do |f| %&gt; 行,并且是

ArgumentError in Users/registrations#edit
 is not a recognized storage provider

更新:

我发现,在开发服务器启动后,对控制器代码进行任何更改都会使其正常工作。例如,如果我在控制器的任何位置添加一个简单的p "test" 行,它就可以工作。如果我然后停止开发服务器并重新启动它,错误将再次出现,但如果我取出 p "test" 行,它会工作。 所以我猜测由于某种原因,在服务器启动时配置设置没有正确设置,并且对控制器的代码进行更改会导致重新加载某些内容,从而正确设置?

/app/controllers/users/registrations_controller.rb

  def edit
    @uploader = User.new.image
    @uploader.success_action_redirect = process_user_avatar_url
    super
  end

/app/uploaders/image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  include CarrierWaveDirect::Uploader

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

  def extension_white_list
    %w(jpg jpeg gif png)
  end

end

/app/models/user.rb

mount_uploader :image, ImageUploader

/config/initializers/s3.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',
    :aws_access_key_id      => KEY,
    :aws_secret_access_key  => SECRET,
  }
  if Rails.env.production?
    config.fog_directory  = PRODUCTION_BUCKET
  else
    config.fog_directory  = DEVELOPMENT_BUCKET
  end
  config.fog_public     = false
end

版本

Rails 3.2.0
ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-darwin11.3.0]
carrierwave (0.6.2)
carrierwave_direct (0.0.6)
fog (1.5.0)

development.rb

Appname::Application.configure do
  config.cache_classes = false
  config.whiny_nils = true
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false
  config.action_mailer.raise_delivery_errors = false
  config.active_support.deprecation = :log
  config.action_dispatch.best_standards_support = :builtin
  config.active_record.mass_assignment_sanitizer = :strict
  config.active_record.auto_explain_threshold_in_seconds = 0.5
  config.assets.compress = false
  config.assets.debug = true
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.log_level = :warn
end

【问题讨论】:

  • 不知道为什么这会被否决。我做错了什么?
  • 您是否只在您的注册“编辑”中使用 direct_upload_form_for?还是在“新”中?
  • @KyleC 仅在“编辑”中使用
  • 在你的 development.rb 环境中,你有没有 config.cache_classes = false config.action_controller.perform_caching = false
  • @KyleC 是的。在问题中添加了 development.rb。

标签: ruby-on-rails file-upload amazon-s3 carrierwave fog


【解决方案1】:

尝试将以下内容放在模型和控制器的顶部:

require_dependency File.expand_path('../../uploaders/image_uploader', __FILE__)

【讨论】:

    【解决方案2】:

    看来你有一个非常奇怪的错误。我记得前段时间我为一个教程构建了一个 Rails 应用程序,我的控制器锁定了它,即使我删除了它没有拾取的动作。

    我有两个想法可以尝试看看。

    1. 删除edit 操作后会发生什么。应用程序是否中断?如果不是,那么您遇到了不同的问题。
    2. 当我创建一个测试应用程序来尝试CarrierWave_Direct 时,当我的初始化程序文件无效时,我得到了相同的ArgumentError。尝试静态放置所有内容,看看它是否正确获取您的信息。

    【讨论】:

      【解决方案3】:

      我不知道这是修复还是解决方法,但您可以尝试添加到您的初始化程序:

      config.storage = :fog
      

      config.storage = :file
      

      您也可以直接在上传器中使用:

      storage :fog
      

      storage :file
      

      【讨论】:

        【解决方案4】:

        您是否在初始化程序文件夹中找到了carrierWave 配置文件? 我认为配置文件没有读取。

        【讨论】:

          猜你喜欢
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-27
          • 2014-08-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多