如何使用Paperclip和rails 3中的s3存储解决"缺少证书"

TJ *_*ill 4 amazon-s3 ruby-on-rails-3

我有一个非常简单的模型和附件

has_attached_file :upload,
    :storage => :s3,
       :bucket => 'bestofbauer',
       :s3_credentials => {
         :access_key_id => ENV['MyAccessKEY'],
         :secret_access_key => ENV['MySecretKey']
       }
Run Code Online (Sandbox Code Playgroud)

我有一个名为bestofbauer的s3桶设置.

我知道我可以将凭证重构为初始化程序,但我还没有得到这个来保存附件,所以我并不担心它.

当我运行对象及其附件的保存时,我得到:

RuntimeError in RecommendationsController#create

Missing credentials
Run Code Online (Sandbox Code Playgroud)

我已经倾倒了:使用Paperclip和Amazon s3上传照片时缺少证书,但这并没有解决我的问题.

我使用以下宝石:

gem "paperclip"
gem "sws-sdk"
gem 'aws-s3'
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?

Bea*_*eau 12

您需要设置环境变量.这有两种不同的方法:

  1. 每次运行rails server或访问S3帐户的任何其他命令时,您都需要包含密钥:

    $ MyAccessKEY=ACCESS_KEY MySecretKEY=SECRET_KEY rails server
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我假设你正在使用bash,所以编辑你的~/.bash_rc~/.bash_profile设置你的环境变量

    export MyAccessKEY=ACCESS_KEY
    export MySecretKEY=SECRET_KEY
    
    Run Code Online (Sandbox Code Playgroud)

    然后打开一个新的终端窗口并仔细检查它们是否已设置

    $ echo $MyAccessKey
    > ACCESS KEY PRINTS OUT HERE
    
    Run Code Online (Sandbox Code Playgroud)

如果您要部署到Heroku,那么您还需要在那里提供您的环境变量:

$ heroku config:add MyAccessKEY=ACCESS_KEY MySecretKEY=SECRET_KEY
Run Code Online (Sandbox Code Playgroud)

你可以查看你的Heroku配置:

$ heroku config
Run Code Online (Sandbox Code Playgroud)

它将列出您为该应用程序提供的所有配置变量.

您可能希望将S3存储桶名称也放在ENV设置中,以便在本地测试时不会弄乱存储桶.