Ошибка при использовании CarrierWave

Я пытаюсь использовать гем CarrierWaveDirect в сочетании с CarrierWave gem, но я получаю сообщение об ошибке при отображении формы прямой загрузки. Это в разработке, еще не пробовал в производстве. Вот форма:

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

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

Ошибка находится в строке <%= direct_upload_form_for @uploader do |f| %> и

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

person ben    schedule 31.07.2012    source источник
comment
Не уверен, почему это получило отрицательный голос. Что я сделал не так?   -  person ben    schedule 01.08.2012
comment
вы используете только direct_upload_form_for при редактировании регистрации? или это тоже в новом?   -  person Kyle C    schedule 02.08.2012
comment
@KyleC использует его только при редактировании   -  person ben    schedule 02.08.2012
comment
В вашей среде development.rb у вас есть config.cache_classes = false config.action_controller.perform_caching = false   -  person Kyle C    schedule 02.08.2012
comment
@KyleC Ага. Добавил в вопрос development.rb.   -  person ben    schedule 02.08.2012


Ответы (4)


Попробуйте разместить следующее в верхней части вашей модели и контроллера:

require_dependency File.expand_path('../../uploaders/image_uploader', __FILE__)
person aceofspades    schedule 07.08.2012

Кажется, у вас действительно странный баг. Я помню, как некоторое время назад, когда я создавал приложение rails для учебника, мой контроллер блокировался, и даже если я удалял действие, оно не выполнялось.

У меня есть две идеи идеи, которые я хотел бы рассмотреть.

  1. Что происходит, когда вы удаляете действие edit. Приложение ломается? Если нет, то у вас другая проблема.
  2. Когда я создал тестовое приложение, чтобы попробовать CarrierWave_Direct, я получил то же самое ArgumentError, когда мой файл инициализатора был недействителен. Попробуйте вставить все статически, чтобы увидеть, правильно ли он получает вашу информацию.
person Baylor Rae'    schedule 09.08.2012

Я не знаю, является ли это исправлением или просто обходным путем, но вы можете попробовать добавить в свой инициализатор:

config.storage = :fog

or

config.storage = :file

Вы также можете использовать непосредственно в своем загрузчике:

storage :fog

or

storage :file
person Matt Van Horn    schedule 09.08.2012

Вы находите файл конфигурации CarrierWave в папке инициализаторов? Я думаю, что файл конфигурации не читается.

person jwako    schedule 22.05.2013