Рисование от S3 через мою фотомодель запутывается - PullRequest
0 голосов
/ 14 июля 2010

Я только что перенес фотографии с моего сервера на 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

1 Ответ

1 голос
/ 20 июля 2010

После просмотра кода контроллера, которым автор поделился со мной, я определил, что код пытается извлечь изображение из локальной файловой системы.Это, конечно, не будет работать, когда изображение хранится на S3.Решение состоит в том, чтобы изменить код, чтобы использовать URI для указания на удаленный файл, а не относительные пути, указывающие на файловую систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...