1

この問題は解決されました。ローカル環境でシークレット アクセス キーが正しくコピー アンド ペーストされていることを再確認するのに十分な時間がないように思えたため、この問題の調査に多くの時間を費やしたことが判明しました。

これについて約 20 の質問を読みましたが、これまでのところどれも役に立ちませんでした。作成コントローラーで SignatureDoesNotMatch 例外が発生し続けますが、その理由がわかりません。

私のクラス(プロジェクトがリリースされていないため、「S3」にマイナーな名前を変更):

class S3File < ActiveRecord::Base
  has_attached_file :s3_attachment,
    storage: :s3,
    bucket: ENV['S3_BUCKET_NAME'],
    s3_credentials: {
      access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
    },
    path: ':id/temp.jpg'
end

ENV 変数を .env ファイルで定義し、サーバーを foreman で起動します。これらの値が「foreman run rails console」で正しいことを確認しました。

これは私にとってはうまくいきませんでしたが、これまでにいくつかのパスを試し、imagemagick をインストールし、次の gem を含めました。

# rails -v Rails 3.2.2
# ruby -v Ruby 1.9.2p290
gem 'paperclip' # paperclip (3.0.4) in Gemfile.lock
gem 'aws-s3' # aws-s3 (0.6.3) in Gemfile.lock
gem 'aws-sdk' # aws-sdk (1.5.2) in Gemfile.lock
gem 'rmagick' # rmagick (2.13.1) in Gemfile.lock

最後に、私の _form パーシャルは次のようになります。

<%= form_for @s3_file do |f| %>
  <div class="field">
    <%= f.file_field :email_attachment %>    
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

必要な人にはもっと情報を提供しますが、現時点では困惑しています。助けてくれる人に感謝します。

4

1 に答える 1

0

aws-s3 と aws-sdk を一緒に使用しようとしている人を見てきましたが、両方とも同じモジュールの名前空間を使用しているため、競合が発生します。これが必ずしもあなたの問題だと言っているわけではありませんが、間違いなく役に立ちません。Paperclip には aws-sdk が必要なので、Gemfile から aws-s3 を削除して開始します。それでもエラーが発生する場合は、has_attached_file 行のすぐ上にデバッガーを追加し、ENV 変数を調べて、それらが実際に設定されていることを確認することをお勧めします。

于 2012-06-07T12:16:09.313 に答える