Bezpośrednie przesyłanie do S3 za pomocą Carrierwave
Niedawno przekonwertowałem poniższy tekst za pomocą Paperclip na Carrierwave, przesyłając go do Amazon S3, dzięki czemu mogę skorzystać z gemu carrierwave_direct, a następnie Sidekiq lub innego klejnotu do przetwarzania w tle.
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 %>
Przesyłanie nośników Carrierwave działa, ale nie wiem, jak uzyskać bezpośrednią pracę części. Częściowo dlatego, że nie wiem, jak włączyć sugerowany kod formularza:
<%= direct_upload_form_for @uploader do |f| %>
<%= f.file_field :track %>
<%= f.submit %>
<% end %
Albo gdzie w moim utworze OR kontroler zwolnienia umieściłem sugerowane:
@uploader = User.new.track
@uploader.success_action_redirect = new_user_url
Readmehttps://github.com/dwilkie/carrierwave_direct i Railscasthttp://railscasts.com/episodes/383-uploading-to-amazon-s3 wskazują najpierw na załadowanie pliku, a następnie utworzenie wpisu do bazy danych. W mojej aplikacji wpisy db już istnieją. Railscast mówi, że jest to możliwe, ale nie przechodzi przez to. Więc to jest pierwszy problem.
Po drugie, muszę przesyłać więcej niż jeden plik naraz. Powyższy kod to osiąga, ale bardzo powoli i oczywiście czyni moją aplikację całkiem bezużyteczną.
Czy ktoś może pomóc? Ogromne dzięki z góry!