簡體   English   中英

s3_direct_upload在生產服務器中不起作用

[英]s3_direct_upload is not working in production server

在Rails 4.0.2中,我使用s3_direct_uploadaws-sdk gems直接為s3存儲桶上傳文件。 在開發環境中它工作正常,但在生產環境中它會拋出如下錯誤,

ActionView::Template::Error (no implicit conversion of nil into String)

在觀點中,

<%= s3_uploader_form :callback_url=>create_cv_url, :id=> "s3_uploader", :key=> "cv_uploads/{unique_id}/${filename}",
  :key_starts_with=> "cv_uploads/", :callback_param=> "cv[direct_upload_url]", :max_file_size=> 1.megabytes,
  :expiration=> 24.hours.from_now.utc.iso8601 do %>

   <%= file_field_tag :file, multiple: true, :max_file_size => 1.megabytes, accept: 'application/pdf application/msword application/rtf application/doc application/docx' %>

<% end %>

<script id="template-upload" type="text/x-tmpl">
<div id="upload_{%=o.unique_id%}" class="upload">
  <h5 class="mt1">Please Wait. <span style="color: #5f6fa0;"> {%=o.name%} </span>is processing...</h5>
  <div class="progress"><div class="progress-bar progress-bar-striped active" style="width: 0%;"></div></div>
</div>

這里,問題主要是指向s3_uploader_form行(在視圖中)。

此功能完全參考http://blog.littleblimp.com/post/53942611764/direct-uploads-to-s3-with-rails-paperclip-and

在paperclip.rb中

Paperclip::Attachment.default_options.merge!(
 url:                  :s3_domain_url,
 path:                 ':class/:attachment/:id/:style/:filename',
 storage:              :s3,
 s3_credentials:       Rails.configuration.aws,
 s3_permissions:       :private,
 s3_protocol:          'http'
)

require 'paperclip/media_type_spoof_detector'
 module Paperclip
 class MediaTypeSpoofDetector
   def spoofed?
    false
   end
 end
end    

在aws.rb中

require 'aws-sdk'
# Rails.configuration.aws is used by AWS, Paperclip, and S3DirectUpload
Rails.configuration.aws = YAML.load(ERB.new(File.read("#   {Rails.root}/config/aws.yml")).result)[Rails.env].symbolize_keys!
AWS.config(:logger=> Rails.logger)
AWS.config(Rails.configuration.aws)

在s3_direct_upload.rb中

S3DirectUpload.config do |c|
 c.access_key_id     = Rails.configuration.aws[:access_key_id]
 c.secret_access_key = Rails.configuration.aws[:secret_access_key]
 c.bucket            = Rails.configuration.aws[:bucket]
 c.region            = "s3"
end

是因為生產環境中的配置問題? 請幫我解決這個問題。

我有同樣的問題,我解決了添加文件config.yml與我的S3憑據:

RailsApp / config.yml

  # Fill in your AWS Access Key ID and Secret Access Key
  # http://aws.amazon.com/security-credentials
  access_key_id: xxxxxx
  secret_access_key: xxxxxxx

更多信息: https//docs.aws.amazon.com/AWSSdkDocsRuby/latest/DeveloperGuide/ruby-dg-setup.html

代碼似乎沒問題。 正如skozz所提到的,其中一個問題可能是您的配置密鑰可能未正確分配。 請檢查“/config/aws.yml”中的aws生產密鑰。

通過這個鏈接 ,我也遭受了同樣的痛苦。 問題是我已經添加了初始化程序,但我需要重新啟動rails(它正在運行但沒有刷新)。

執行此命令對我有用。 figaro heroku:set -e production

暫無
暫無

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

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