tutorial rails que notidentifiedbyimagemagickerror espaƱol errors ejemplos descargar ruby-on-rails ruby-on-rails-4 amazon-s3 paperclip

que - Problema de Ruby on Rails con Paperclip mientras se carga a s3



ruby on rails que es (2)

He intentado lo mismo con clip, pero fue un poco complicado.

Así que preferí usar los rieles para cargar archivos y recuperarlos,

Se puede hacer por,

<%= f.file_field :file_name %> <div class="actions"> <%= f.submit "Upload" %> </div>

Puede ser recuperado por,

File.open(Rails.root.join( ''app/assets/images/'', memory.original_filename), ''wb'') do |file| file.write(memory.read) end

Tengo un modelo de registro y controlador:

require ''open-uri'' class Record < ActiveRecord::Base has_attached_file :record, :s3_protocol => :https, :url => '':s3_domain_url'', :path => ''/record/latest/:basename.:extension'' has_attached_file :archive_record, :s3_protocol => :https, :url => '':s3_domain_url'', :path => ''/record/archive/:basename.:extension'' end class RecordsController < ApplicationController def upload_record @error = nil previous_record = Record.where(:is_archive => false).first @new_record = Record.new(record_params) if @new_record.save unless previous_record.blank? if create_archive(previous_record) previous_record.destroy end end @success = I18n.t(''record.success.record_uploaded'') else @error = find_error(@new_record) end respond_to do |format| format.js { render :layout => false } end end def change_record previous_record = Record.where(:is_archive => false).first archive_record = Record.where(:id => params[:id]).first if create_archive(previous_record) && create_current(archive_record) previous_record.destroy archive_record.destroy end end private def record_params params.require(:record).permit(:record_type, :record, :version, :release_date) end def create_archive(previous_record) archive = Record.new archive.archive_record = URI.parse(previous_record.record.url) archive.version = previous_record.version archive.record_file_name = previous_record.record_file_name archive.record_content_type = previous_record.record_content_type archive.is_archive = true @archive_record_remote_url = previous_record.record.url archive.save(:validate => false) end def create_current(archive_record) latest = Record.new latest.record = URI.parse(archive_record.archive_record.url) latest.version = archive_record.version latest.record_file_name = archive_record.record_file_name latest.record_content_type = archive_record.record_content_type latest.is_archive = false @archive_record_remote_url = archive_record.archive_record.url latest.save(:validate => false) end end

Hay dos archivos adjuntos: el último registro y el archivo.

El método upload_record carga un registro y verifica que haya otro registro presente en el último registro (el último registro solo puede ser un registro y el archivo puede tener muchos). Cuando hay un registro existente en la última create_archive o podemos decir si hay un registro actual, se llama al método create_archive que convierte el último registro en un registro de archivo y lo guarda en la carpeta de archivo en s3. El registro subido recientemente se convierte en el record actual.

Hay un método change_record que se llama cuando se hace clic en el botón ''make current'' en cualquiera de los archivos. En el método change_record , convierto el último registro en un archivo y el archivo create_archive en el último registro utilizando los dos métodos create_archive y create_current .

Cuando convierto cualquier registro en un archive_record lo hago con éxito y puedo ver que el registro se guarda en /record/archive/ en S3, pero cuando convierto el registro de archivo en el registro actual, el registro no se guarda en /record/latest/ en S3.

Gracias por leer este largo problema. ¿Alguien me puede ayudar?


Hice una clonación profunda de registro de clips en mi proyecto y también tuve problemas con URI.parse, simplemente abandoné el registro existente de clips y funcionó bien. Bueno, en tu caso, esto debería funcionar bien

def create_archive(previous_record) archive = Record.new archive.archive_record = previous_record.record archive.version = previous_record.version archive.is_archive = true @archive_record_remote_url = previous_record.record.url archive.save(:validate => false) end def create_current(archive_record) latest = Record.new latest.record = archive_record.archive_record latest.version = archive_record.version latest.is_archive = false @archive_record_remote_url = archive_record.archive_record.url latest.save(:validate => false) end