2014-07-16 11 views
5

In Rails 4.0.2 verwende ich s3_direct_upload und aws-sdk Edelsteine ​​für Dateiuploads für s3-Bucket direkt. In Entwicklungsumgebung funktioniert gut es aber in der Produktionsumgebung ist es einen Fehler wie unten werfen,s3_direct_upload funktioniert nicht im Produktionsserver

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

in Aussicht,

<%= 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> 

Hier wird das Problem in erster Linie zeigt auf s3_uploader_form Linie (in Ansichten).

Diese Funktion wird vollständig von http://blog.littleblimp.com/post/53942611764/direct-uploads-to-s3-with-rails-paperclip-and

In paperclip.rb bezeichnet

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  

In 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) 

In 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 

I S es wegen Konfigurationsproblem in der Produktionsumgebung? Bitte helfen Sie mir, dieses Problem zu lösen.

Antwort

6

hatte ich das gleiche Problem und ich es lösen Hinzufügen der Datei config.yml mit meinem S3 Anmeldeinformationen:

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 

Weitere Informationen: https://docs.aws.amazon.com/AWSSdkDocsRuby/latest/DeveloperGuide/ruby-dg-setup.html

+0

Danke für Ihre Antwort. Es funktioniert nach Änderung der Datei aws.yml –

2

Der Code scheint in Ordnung zu sein. Als skozz erwähnt, möglicherweise eines der Probleme mit Ihren Konfigurationsschlüsseln, die möglicherweise nicht richtig zugewiesen sind. Bitte überprüfen Sie die Produktionsschlüssel von aws in "/config/aws.yml".

0

Ich litt das gleiche, indem ich diesem link folgte. Die Sache ist, dass ich die Initialisierer hinzugefügt habe, aber ich musste Schienen neu starten (es wurde ausgeführt, aber nicht aktualisiert).

0

Die Ausführung dieses Befehls funktionierte für mich. figaro heroku:set -e production

Verwandte Themen