Уменьшение изображений на стадии разработки

Decrease Image

В этом посте, я хочу рассказать, о том как я избавился от одного побочного эффекта связанного с использованием модуля ngx_http_image_filter_module для nginx. Он заключался в том что во время разработки я не использую nginx+passenger и как следствие уменьшенные копии изображений не создаются.

Чтобы решить эту проблему, я завёл специальный контроллер, который будет выполнять роль модуля ngx_http_image_filter_module во время разработки и уменьшать изображения вместо него. Так выглядит созданный мной контроллер development_controller.rb:

require "RMagick"

class DevelopmentController < ApplicationController

  def resize
    image_file = File.join(RAILS_ROOT, 
      "public/attachment/file/#{params[:id]}/#{params[:file_name]}")

    image = Magick::Image.read(image_file).first
    image.resize_to_fit!(530, 480) if image.columns > 530

    send_data(image.to_blob, :disposition => 'inline')
  end
  
end

Чтобы все запросы на уменьшенные копии изображений передавались ему, я добавил следующее правило в routes.rb

if RAILS_ENV == 'development'
  map.connect "/attachment/file/:id/medium/:file_name", 
    :controller => 'development', :action => 'resize', 
    :file_name => /.*\.(jpg|jpeg|gif|png)/i
end

Это всё, что нужно сделать, для того чтобы получить во время разработки функциональность аналогичную той, что предоставляет модуль ngx_http_image_filter_module.

Тэги: nginx
Будь всегда в курсе последних новостей блога подписавшись на новости
в формате RSS. Присоединяйся!
* * *

Комментарии

* * *

Добавить новый комментарий

Доступные BB теги

*

* (не будет опубликован)

(если есть)

  • Multi CAPTCHA Refresh2
  • *

1. Проверьте комментарий перед отправкой
2. Все комментарии проходят модерацию перед публикацией в блоге