Я только что перенес фотографии с моего сервера на S3. Кажется, все работает без сбоев, кроме одной маленькой уловки.
Если пользователь выбирает фотографию со своего существующего носителя, сервер возвращает ошибку 500. Я предполагаю, что это потому, что он все еще может искать его на моем локальном компьютере, ИЛИ он не обращается должным образом из фотомодели:
а. От моего местного:
Errno::ENOENT in PhotosController#edit
No such file or directory - photos/213/original/1.jpg
RAILS_ROOT: /Users/triphizzle/Sites/hq_channel
б. Из моей постановки:
Just a 500 error
Источник ошибки это часть контроллера фотографий:
def edit
@gallery = @organization.media.find_by_media_id(params[:gallery_id]).media
@photo = @gallery.photos.find(params[:id])
crop if params[:crop]
end
Как это работает:
Откроется галерея.
Контроллер:
def set_search_image
end
Вид:
= link_to 'from media', organization_media_galleries_path(@organization, :type => 'search_image'), {:class => 'button get_media'}
Они выбирают галерею с таким javascript:
:plain
$(".gallery_link").click(function(){
$("#media_header").slideUp("fast").html('');
$.ajax({type: "GET", url: $(this).attr("href") + '?hide_nav=true&type=#{params[:type]}', dataType: "script"});
return false;
});
Пока это все работает! .. Все галереи превью имеют активные ссылки на S3 ..
Тогда я нажимаю на фото ..:
Javascript:
- if params[:hide_nav]
:plain
$(".edit_photo_link").click(function(){
$("#media_header").slideUp("fast").html('');
$.ajax({type: "GET", url: $(this).attr("href") + '?crop=true&type=#{params[:type]}', dataType: "script"});
return false;
});
Haml:
= link_to image_tag(photo.photo.url(:cropped_thumb)), edit_organization_media_gallery_photo_path(@organization, @gallery, photo)+"?crop=true&type=photo", {:class => 'edit_photo_link'}
Blam! Это ломает! Я посмотрел на путь, который он ищет, и он проверяет на S3. Это правильный путь, модели настроены правильно, потому что я могу загружать / просматривать / редактировать изображения, которые я там установил.
Еще одно замечание: торгуются две модели.
Вот снимок двух ..
Фотомодель:
has_attached_file :photo,
:styles => { :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, :resized_thumb => {:geometry => "115x70>"}, :deal => {:geometry => "64x56#"},
:cropped_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}#", :jcrop => true},
:resized_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}>"},
:orig => '300x168>',
:cropped_orig => {:geometry => '300x168#', :jcrop => true},
:resized_orig => {:geometry => '300x168>'} },
:processors => [:jcropper],
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => "photos/:id/:style/:basename.:extension",
:bucket => 'hq-photo/root/system' # TODO: this needs to be a constant based on env
А это поисковое изображение S3 info в модели организации:
has_attached_file :search_image,
:styles => { :orig => "300x400>",
:cropped => {:geometry => "#{SEARCH_IMAGE_WIDTH}x#{SEARCH_IMAGE_HEIGHT}#", :format => :png, :jcrop => true},
:deal => ["64x56#", :png],
:thumb => {:geometry => "80x58#", :format => :png, :jcrop => true} },
:convert_options => {:cropped => Proc.new{self.convert_options},
:deal => Proc.new{self.convert_options_thumb},
:thumb => Proc.new{self.convert_options_thumb}},
:processors => [:jcropper],
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => "search_images/:id/:style/:basename.:extension",
:bucket => 'hq-photo/root/system' # TODO: this needs to be a constant based on env