有奇怪的问题,无法理解有什么问题。所有作品都提交给了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'
答案 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)