2

CarrierWaveDirectgemをCarrierWavegemと組み合わせて使用​​しようとしていますが、直接アップロードフォームをレンダリングするときにエラーが発生します。これは開発中であり、まだ本番環境で試していません。フォームは次のとおりです。

/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
4

4 に答える 4

0

CarrierWave 構成ファイルは初期化フォルダーにありますか? 設定ファイルが読み込まれていないと思います。

于 2013-05-22T05:14:03.387 に答える
0

モデルとコントローラーの上部に以下を配置してみてください。

require_dependency File.expand_path('../../uploaders/image_uploader', __FILE__)
于 2012-08-07T03:31:58.883 に答える
0

それが修正なのか単なる回避策なのかはわかりませんが、イニシャライザに追加してみてください:

config.storage = :fog

また

config.storage = :file

アップローダで直接使用することもできます。

storage :fog

また

storage :file
于 2012-08-09T13:17:24.303 に答える
0

本当に奇妙なバグがあるようです。しばらく前に、チュートリアル用の Rails アプリケーションを作成したとき、コントローラーがロックされていて、アクションを削除してもそれが反映されなかったことを覚えています。

2 つのアイデアがあります。

  1. editアクションを削除するとどうなるか。アプリケーションが壊れますか?そうでない場合は、別の問題があります。
  2. テスト アプリケーションを作成して試してみたところ、イニシャライザ ファイルが無効なときにCarrierWave_Direct同じ結果が得られました。ArgumentErrorすべてを静的に配置して、情報が適切に取得されるかどうかを確認してください。
于 2012-08-09T13:08:17.257 に答える