1

私はレールキャストを通過し、ここでStackOverflowについて調査しました。同じ問題を抱えている他の人を見つけましたが、私が調査した他の解決策はどれもうまくいかないようです。他の投稿で提案されているように、コードの複数のバリエーションを試しました...運がありません。

CarrierwaveFogのgemを介してPDFファイルをAmazonS3にアップロードして保存しようとしてますが、役に立ちません。Herokuを本番環境で使用している間は、ローカルで動作させることすらできないため、Herokuにこれをデプロイしようとはしていません。返されるエラーは

必要な引数がありません:aws_access_key_id、aws_secret_access_key

この問題を解決するにはどうすればよいですか?

carrierwave.rb(初期化子)

CarrierWave.configure do |config|
    config.fog_credentials = {
        provider: 'AWS',
        aws_access_key_id: ENV['MY_KEY_ID'],
        aws_secret_access_key: ENV['MY_KEY']
    }

    config.fog_directory  = ENV['MY_BUCKET']
    config.fog_public     = false
end

pdf_uploader.rb:

class PdfUploader < CarrierWave::Uploader::Base
    storage :fog

    include CarrierWave::MimeTypes
    process :set_content_type

    def store_dir
        "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
    end
end
4

4 に答える 4

2

私は同じ問題に遭遇し、変数を文字列にラップすることで違いが生じました。

代わりにRails.application.secrets.aws_access_key_id"#{Rails.application.secrets.aws_access_key_id}"値が文字列として挿入されることを確認していました。

これが私の初期化子です:

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: "#{Rails.application.secrets.aws_access_key_id}",
    aws_secret_access_key: "#{Rails.application.secrets.aws_secret_access_key}"
  }
  config.fog_directory  = Rails.application.secrets.aws_s3_bucket
  config.fog_public     = true
  config.fog_attributes = { 'Cache-Control'=>'max-age=315576000' }
end

そして、これが私のsecrets.ymlです:

development:
  secret_key_base: 'xxxxxxxxxxxxxxxxxxxxxxxxx'
  aws_access_key_id: 'xxxxxxxxxxxxxxxxxxxxxxxxx'
  aws_secret_access_key: 'xxxxxxxxxxxxxxxxxxxxxxxxx'
  aws_s3_bucket: 'xxxxxxxxxxxxxxxxxxxxxxxxx'
production:
  secret_key_base: <%= ENV['SECRET_KEY_BASE'] %>
  aws_access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
  aws_secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
  aws_s3_bucket: <%= ENV['AWS_BUCKET_NAME'] %>
于 2014-11-12T23:11:51.117 に答える
1

key_id、keyANDバケットを環境変数として設定する際に問題が発生したようです。3つすべてを文字列定数に変更すると、正常に機能しているように見えました。また、Herokuにデプロイし、本番環境でも機能を検証しました。

最終的な初期化ファイル:

CarrierWave.configure do |config|
    config.storage = :fog
    config.fog_credentials = {
        provider: 'AWS',
        aws_access_key_id: 'MY_KEY_ID_HERE',
        aws_secret_access_key: 'MY_KEY_HERE'
    }

    config.fog_directory  = 'MY_S3_BUCKET_HERE'
    config.fog_public     = false
end
于 2013-02-01T22:30:53.507 に答える
0

このエラーは、とがである可能性が高いことを意味ENV['MY_KEY_ID']ENV['MY_KEY']ますnil

これらの値を、AmazonAWSのマイアカウントページから取得した文字列に置き換えてみてください。

それで:

CarrierWave.configure do |config|
    config.fog_credentials = {
        provider: 'AWS',
        aws_access_key_id: "YOUR ACCESS KEY ID",
        aws_secret_access_key: "YOUR SECRET KEY"
    }

    config.fog_directory  = "YOUR BUCKET NAME"
    config.fog_public     = false
end
于 2013-02-01T04:09:39.500 に答える
0

私はミドルマンのセットアップで同様の問題に遭遇しました。

コンソールAWS_ACCESS_KEY='xxxxxx'で実行し、構成ファイルで実行しましたENV['AWS_ACCESS_KEY']。うまくいきませんでした。ただしexport AWS_ACCESS_KEY='xxxxx'、構成ファイルは機能しました。これは、「環境内の子プロセスに渡される各名前をエクスポートマークする」ためです。最初のものはしませんでしたが。

あなたが同じ問題を抱えていて、これが役立つことを願っています。

于 2014-02-15T04:11:59.397 に答える