Rails,Paperclip,S3问题

时间:2014-04-22 17:14:40

标签: ruby-on-rails amazon-s3 paperclip

有奇怪的问题,无法理解有什么问题。所有作品都提交给了heroku。我试图在s3服务器上存储回形针附件。但无法使其在生产和开发上发挥作用。

game.rb

has_attached_file :image,
                :styles => { :big => "500x500",
                             :tiny => "25x25" },
                :default_url => "/images/game/:style/missing.png",
                :storage => :s3,
                :s3_credentials => S3_CREDENTIALS,
                :path => "games/:id/:style.:extension",
                :bucket => 'my-assets'

validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
validates_attachment_file_name :image, :matches => [/png\Z/, /jpe?g\Z/]

config / initializers / s3.rb文件:

if Rails.env == "production"
  # set credentials from ENV hash
  S3_CREDENTIALS = { :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
                     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
                     :bucket => "my-assets" }
else
  # get credentials from YML file
  S3_CREDENTIALS = Rails.root.join("config/s3.yml")
end

配置/ s3.yml

development:
  access_key_id: XXX
  secret_access_key: YYY
  bucket: my-assets

production:
  access_key_id: XXX
  secret_access_key: YYY
  bucket: my-assets

尝试提交后我得到了空白页面,服务器日志告诉我:

2014-04-22T17:03:05.984867+00:00 app[web.1]: Command :: identify -format %m '/tmp/0241bb4e859805f30efd33cf186468f120140422-2-1093xv6[0]'
2014-04-22T17:03:05.985022+00:00 app[web.1]: Command :: identify -format %m '/tmp/0241bb4e859805f30efd33cf186468f120140422-2-1093xv6[0]'
2014-04-22T17:03:06.087486+00:00 app[web.1]: Command :: convert '/tmp/0241bb4e859805f30efd33cf186468f120140422-2-1093xv6[0]' -auto-orient -resize "25x25" '/tmp/0241bb4e859805f30efd33cf186468f120140422-2-1093xv620140422-2-dyoalj'
2014-04-22T17:03:06.087486+00:00 app[web.1]: Command :: convert '/tmp/0241bb4e859805f30efd33cf186468f120140422-2-1093xv6[0]' -auto-orient -resize "25x25" '/tmp/0241bb4e859805f30efd33cf186468f120140422-2-1093xv620140422-2-dyoalj'
2014-04-22T17:03:06.337480+00:00 app[web.1]: Command :: file -b --mime '/tmp/0241bb4e859805f30efd33cf186468f120140422-2-1093xv620140422-2-dyoalj'
2014-04-22T17:03:06.340733+00:00 app[web.1]: Command :: file -b --mime '/tmp/0241bb4e859805f30efd33cf186468f120140422-2-1093xv620140422-2-dyoalj'
2014-04-22T17:03:06.549137+00:00 app[web.1]: Command :: file -b --mime-type '/tmp/93d8a7cd8991a044877ff351da55677e20140422-2-15pyo7z'
2014-04-22T17:03:06.549137+00:00 app[web.1]: Command :: file -b --mime-type '/tmp/93d8a7cd8991a044877ff351da55677e20140422-2-15pyo7z'
2014-04-22T17:03:06.694015+00:00 app[web.1]: [paperclip] saving games/1/original.png
2014-04-22T17:03:06.694015+00:00 app[web.1]: [paperclip] saving games/1/original.png
2014-04-22T17:03:07.648471+00:00 app[web.1]: Completed 500 Internal Server Error in 7103ms
2014-04-22T17:03:07.648471+00:00 app[web.1]: Completed 500 Internal Server Error in 7103ms
2014-04-22T17:03:07.663040+00:00 app[web.1]: 
2014-04-22T17:03:07.663040+00:00 app[web.1]: Errno::ECONNREFUSED (Connection refused - connect(2)):
2014-04-22T17:03:07.663040+00:00 app[web.1]:   app/controllers/games_controller.rb:50:in `block in update'
2014-04-22T17:03:07.663040+00:00 app[web.1]:   app/controllers/games_controller.rb:49:in `update'
2014-04-22T17:03:07.663040+00:00 app[web.1]: 
2014-04-22T17:03:07.663040+00:00 app[web.1]: 
2014-04-22T17:03:07.663040+00:00 app[web.1]: 
2014-04-22T17:03:07.663040+00:00 app[web.1]: Errno::ECONNREFUSED (Connection refused - connect(2)):
2014-04-22T17:03:07.663040+00:00 app[web.1]:   app/controllers/games_controller.rb:50:in `block in update'
2014-04-22T17:03:07.663040+00:00 app[web.1]:   app/controllers/games_controller.rb:49:in `update'

尝试测试开发(本地)时,服务器错误有点不同:

[paperclip] saving /games/images/000/000/001/original/game.png
   (0.4ms)  ROLLBACK
Completed 500 Internal Server Error in 1210ms

    Errno::ECONNREFUSED (Connection refused - connect(2) for "my-assets.my-assets.s3-website-us-east-1.amazonaws.com" port 443):
      app/controllers/games_controller.rb:50:in `block in update'
      app/controllers/games_controller.rb:49:in `update'

1 个答案:

答案 0 :(得分:0)

转到S3控制台并确保将存储桶设置为"不要启用网站托管"在"静态网站托管"。

我建议您仅将s3凭据存储在ENV变量中并转储s3.yml文件。它更安全。

您可以在环境文件(production.rb,development.rb,test.rb等)中设置回形针默认值,如下所示:

  config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
      :bucket => ENV['AWSBucketName'],
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    }
  }

你不需要在你的模型中重复那些(game.rb)