[英]Amazon s3, Paperclip, Heroku - trying to make it work
我在使用Amazon s3通過Heroku管理Paperclip上傳的圖像時遇到問題。 我是新來的,需要幫助。
我的Gemfile配置如下:
gem 'paperclip', '~> 4.3.0'
gem 'aws-sdk', '< 2'
我已經搜索了這個問題,並且我確定存儲桶和必需的鍵已經按原樣配置。 下面是錯誤消息。
2015-10-10T15:42:22.470342+00:00 app[web.1]: (1.4ms) BEGIN
2015-10-10T15:42:22.538108+00:00 app[web.1]: SQL (1.3ms) INSERT INTO "pins" ("description", "image_file_name", "image_content_type", "image_file_size", "image_updated_at", "user_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id" [["description", "huggable dog"], ["image_file_name", "huskie.jpg"], ["image_content_type", "image/jpeg"], ["image_file_size", 107437], ["image_updated_at", "2015-10-10 15:42:21.625762"], ["user_id", 3], ["created_at", "2015-10-10 15:42:22.532123"], ["updated_at", "2015-10-10 15:42:22.532123"]]
2015-10-10T15:42:23.614978+00:00 heroku[router]: at=info method=POST path="/pins" host=pixblog.herokuapp.com request_id=a95e7cb8-bfd6-4de9-9e76-51f697f1b5d0 fwd="50.185.53.42" dyno=web.1 connect=1ms service=2468ms status=500 bytes=1754
2015-10-10T15:42:23.607308+00:00 app[web.1]: (1.7ms) ROLLBACK
2015-10-10T15:42:23.610744+00:00 app[web.1]:
2015-10-10T15:42:23.610748+00:00 app[web.1]: ArgumentError (missing required :bucket option):
2015-10-10T15:42:23.610749+00:00 app[web.1]: app/controllers/pins_controller.rb:31:in `create'
2015-10-10T15:42:23.610751+00:00 app[web.1]:
2015-10-10T15:42:23.610752+00:00 app[web.1]:
2015-10-10T15:42:23.608813+00:00 app[web.1]: Completed 500 Internal Server Error in 2004ms (ActiveRecord: 5.8ms)
updating Heroku CLI...Update hash signature mismatch
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:10:in `error'
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:127:in `block (2 levels) in update'
/usr/local/heroku/ruby/lib/ruby/1.9.1/tmpdir.rb:83:in `mktmpdir'
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:116:in `block in update'
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:88:in `wait_for_lock'
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:112:in `update'
/Users/DigitalEtchings/.heroku/client/lib/heroku/updater.rb:101:in `autoupdate'
/Users/DigitalEtchings/.heroku/client/lib/heroku/cli.rb:28:in `start'
/usr/local/bin/heroku:24:in `<main>'
我了解指向pins_controller.rb
的參數錯誤, pins_controller.rb
的代碼處理圖像上傳的結果-不會發生。 救命?
我在這里提供了解釋
它可以幫助您設置回形針,S3和Heroku。
ArgumentError( 缺少必需的:bucket選項 ):
該錯誤僅表示您沒有在應用程序中為Paperclip
實例設置選項。
這里有一個很棒的教程 。
您需要執行以下操作:
#config/environments/production.rb
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
bucket: ENV['S3_BUCKET_NAME']
}
然后將其與Heroku
的ENV
變量分配結合起來,如下所示:
$ heroku config:set S3_BUCKET_NAME=your_bucket_name
$ heroku config:set AWS_ACCESS_KEY_ID=your_access_key_id
$ heroku config:set AWS_SECRET_ACCESS_KEY=your_secret_access_key
在Rails 4+中,最好使用它們的config/secrets.rb
哈希值 :
#config/secrets.rb
production:
s3:
:bucket: "bucket_name"
:access: "access_key_id"
:secret: "secret_access_key"
這將使您能夠引用:
#config/application.rb
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
access_key_id: Rails.application.secrets.s3[:access],
secret_access_key: Rails.application.secrets.s3[:sercret]
}
bucket: Rails.application.secrets.s3[:bucket]
}
這樣做的好處是您可以使用ENV
變量填充您的secrets
:
#config/secrets.rb
development:
s3:
:bucket: "dev_bucket_name"
:access: "access_key_id"
:secret: "secret_access_key"
production:
s3:
:bucket: ENV["AMAZON_S3_BUCKET"]
:access: ENV["AMAZON_ACCESS_KEY_ID"]
:secret: ENV["AMAZON_SECRET_ACCESS_KEY"]
我們發現標准Heroku
建議有一個小問題; 您需要在s3_credentials
哈希值之外包括paperclip
的bucket
選項:
對於未顯示的圖像,存在許多潛在問題:
上傳
實際上傳的是您的圖片嗎?
最簡單的檢查方法是轉到您的S3帳戶並查找。 如果它們在那里,則表明您有一個權限/ Rails問題,阻止它們顯示; 如果沒有,這意味着您還會遇到其他問題。
根據您發布的內容,強烈建議您仔細閱讀一下Heroku日志。 如果您不喜歡瀏覽大量文本,則可能希望將LogEntries添加到您的應用程序中-它允許您查看實時提要,從而為Rails提供了明確的日志。
軌道
Rails較常見的問題之一是,它仍將嘗試從本地目的地加載資產。 我們始終使用s3_host_name
來指定回形針將從中提取數據的主機。
尤其是對於歐洲水桶來說,這是一個問題- s3_host_name
,我們通過定義s3_host_name
解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.