2012-07-31 3 views
2

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

/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 
+0

Не знаете, почему это получило понижение. Что я сделал не так? – ben

+0

Вы используете только direct_upload_form_for в своих регистрациях «edit»? или это также в «новом»? –

+0

@KyleC Использовать его только в «edit» – ben

ответ

0

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

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

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

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

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

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

config.storage = :fog 

или

config.storage = :file 

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

storage :fog 

или

storage :file 
0

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

Смежные вопросы