Direktes Hochladen auf S3 mit Carrierwave
Ich habe kürzlich das Folgende von der Verwendung von Paperclip zum Hochladen von Carrierwave auf Amazon S3 konvertiert, damit ich das Juwel carrierwave_direct und dann Sidekiq oder ein anderes Juwel für die Hintergrundverarbeitung verwenden kann.
class Release < ActiveRecord::Base
has_many :releases_tracks, :dependent => :destroy
has_many :tracks, :through => :releases_tracks, :order => "releases_tracks.position DESC"
accepts_nested_attributes_for :tracks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => :true
accepts_nested_attributes_for :releases_tracks
end
class Track < ActiveRecord::Base
mount_uploader :track, TrackUploader
has_many :releases_tracks, :dependent => :destroy
has_many :releases, :through => :releases_tracks
end
/views/releases/track_upload.html.erb
<%= form_for(@release, :html => { :multipart => true }) do |f| %>
<h3>Upload Tracks for <%= @release.title %></h3>
<% index = 0 %>
<%= f.fields_for :tracks do |builder| %>
<%= @release.tracks[index].name %>
<%= f.file_field :track, :class => "file styled", :title => 'Select Track'%>
<% index += 1 %>
<% end %>
<%= f.submit "Upload Tracks", :class => "submit" %>
<% end %>
Carrierwave-Uploads funktionieren, aber ich kann nicht herausfinden, wie der direkte Teil funktioniert. Zum Teil, weil ich nicht herausfinden kann, wie ich den vorgeschlagenen Formularcode einbauen kann:
<%= direct_upload_form_for @uploader do |f| %>
<%= f.file_field :track %>
<%= f.submit %>
<% end %
Oder das wo in meinem Track ODER Release Controller platziere ich vorgeschlagen:
@uploader = User.new.track
@uploader.success_action_redirect = new_user_url
Die Liesmichhttps://github.com/dwilkie/carrierwave_direct und Railscasthttp://railscasts.com/episodes/383-uploading-to-amazon-s3 beide zeigen darauf, dass zuerst Ihre Datei hochgeladen und dann Ihr Datenbankeintrag erstellt wird. In meiner App sind die Datenbankeinträge bereits vorhanden. Der Railscast sagt, dass es möglich ist, geht aber nicht durch. Das ist also das erste Problem.
Das zweite ist, dass ich mehr als eine Datei gleichzeitig hochladen muss. Der obige Code erreicht das, aber sehr langsam und macht meine App dabei natürlich ziemlich nutzlos.
Kann jemand helfen? Vielen Dank im Voraus!