簡體   English   中英

Amazon s3,Paperclip,Heroku-試圖使其正常運行

[英]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']
}

然后將其與HerokuENV變量分配結合起來,如下所示:

$ 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哈希值之外包括paperclipbucket選項:

在此處輸入圖片說明


對於未顯示的圖像,存在許多潛在問題:

上傳

實際上傳的是您的圖片嗎?

最簡單的檢查方法是轉到您的S3帳戶並查找。 如果它們在那里,則表明您有一個權限/ Rails問題,阻止它們顯示; 如果沒有,這意味着您還會遇到其他問題。

根據您發布的內容,強烈建議您仔細閱讀一下Heroku日志。 如果您不喜歡瀏覽大量文本,則可能希望將LogEntries添加到您的應用程序中-它允許您查看實時提要,從而為Rails提供了明確的日志。

軌道

Rails較常見的問題之一是,它仍將嘗試從本地目的地加載資產。 我們始終使用s3_host_name來指定回形針將從中提取數據的主機。

尤其是對於歐洲水桶來說,這是一個問題- s3_host_name ,我們通過定義s3_host_name解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM