Изображение refinerycms не загружается - ошибка стрекозы

Я работаю над разработкой приложения Rails для Refinerycms, которое хорошо работало локально, и теперь я переместил его на свой VPS, и у меня возникли проблемы с изображениями, которые я загрузил через Refinerycms, но они не загружались, и я читал, что мне нужно обновить моя версия imagemagick. Я обновился с 6.2.8 до 6.7.8. Теперь все изображения загружаются на некоторых страницах, но не на стороне администратора.

Что вызывает эту проблему? Вот трассировка стека ошибки.

Dragonfly::Shell::CommandFailed (Command failed (convert '/var/www/vhosts/tomstestsite.us/PersonalTrainingKT/public/system/refinery/images/2012/06/03/16_36_48_339_pamLemke_after.jpg' '-resize' '225x255>' '/tmp/dragonfly20120705-7812-1xb3pce') with exit status 127):
  dragonfly (0.9.12) lib/dragonfly/shell.rb:29:in `raise_shell_command_failed'
  dragonfly (0.9.12) lib/dragonfly/shell.rb:23:in `run'
  dragonfly (0.9.12) lib/dragonfly/image_magick/utils.rb:17:in `convert'
  dragonfly (0.9.12) lib/dragonfly/image_magick/processor.rb:103:in `convert'
  dragonfly (0.9.12) lib/dragonfly/image_magick/processor.rb:27:in `resize'
  dragonfly (0.9.12) lib/dragonfly/image_magick/processor.rb:87:in `thumb'
  dragonfly (0.9.12) lib/dragonfly/function_manager.rb:39:in `call'
  dragonfly (0.9.12) lib/dragonfly/function_manager.rb:39:in `block (2 levels) in call_last'
  dragonfly (0.9.12) lib/dragonfly/function_manager.rb:38:in `catch'
  dragonfly (0.9.12) lib/dragonfly/function_manager.rb:38:in `block in call_last'
  dragonfly (0.9.12) lib/dragonfly/function_manager.rb:37:in `each'
  dragonfly (0.9.12) lib/dragonfly/function_manager.rb:37:in `call_last'
  dragonfly (0.9.12) lib/dragonfly/processor.rb:5:in `process'
  dragonfly (0.9.12) lib/dragonfly/job.rb:79:in `apply'
  dragonfly (0.9.12) lib/dragonfly/job.rb:253:in `block in apply'
  dragonfly (0.9.12) lib/dragonfly/job.rb:253:in `each'
  dragonfly (0.9.12) lib/dragonfly/job.rb:253:in `apply'
  dragonfly (0.9.12) lib/dragonfly/response.rb:25:in `to_response'
  dragonfly (0.9.12) lib/dragonfly/server.rb:43:in `block in call'
  dragonfly (0.9.12) lib/dragonfly/server.rb:39:in `catch'
  dragonfly (0.9.12) lib/dragonfly/server.rb:39:in `call'
  dragonfly (0.9.12) lib/dragonfly/middleware.rb:11:in `call'
  rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward'
  rack-cache (1.2) lib/rack/cache/context.rb:245:in `fetch'
  rack-cache (1.2) lib/rack/cache/context.rb:185:in `lookup'
  rack-cache (1.2) lib/rack/cache/context.rb:66:in `call!'
  rack-cache (1.2) lib/rack/cache/context.rb:51:in `call'
  rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward'
  rack-cache (1.2) lib/rack/cache/context.rb:245:in `fetch'
  rack-cache (1.2) lib/rack/cache/context.rb:185:in `lookup'
  rack-cache (1.2) lib/rack/cache/context.rb:66:in `call!'
  rack-cache (1.2) lib/rack/cache/context.rb:51:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/reloader.rb:65:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  railties (3.2.3) lib/rails/rack/logger.rb:26:in `call_app'
  railties (3.2.3) lib/rails/rack/logger.rb:16:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/request_id.rb:22:in `call'
  rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'
  rack (1.4.1) lib/rack/runtime.rb:17:in `call'
  activesupport (3.2.3) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.4.1) lib/rack/lock.rb:15:in `call'
  actionpack (3.2.3) lib/action_dispatch/middleware/static.rb:62:in `call'
  railties (3.2.3) lib/rails/engine.rb:479:in `call'
  railties (3.2.3) lib/rails/application.rb:220:in `call'
  railties (3.2.3) lib/rails/railtie/configurable.rb:30:in `method_missing'
  passenger (3.0.11) lib/phusion_passenger/rack/request_handler.rb:96:in `process_request'
  passenger (3.0.11) lib/phusion_passenger/abstract_request_handler.rb:513:in `accept_and_process_next_request'
  passenger (3.0.11) lib/phusion_passenger/abstract_request_handler.rb:274:in `main_loop'
  passenger (3.0.11) lib/phusion_passenger/classic_rails/application_spawner.rb:321:in `start_request_handler'
  passenger (3.0.11) lib/phusion_passenger/classic_rails/application_spawner.rb:275:in `block in handle_spawn_application'
  passenger (3.0.11) lib/phusion_passenger/utils.rb:479:in `safe_fork'
  passenger (3.0.11) lib/phusion_passenger/classic_rails/application_spawner.rb:270:in `handle_spawn_application'
  passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:357:in `server_main_loop'
  passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously'
  passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:180:in `start'
  passenger (3.0.11) lib/phusion_passenger/classic_rails/application_spawner.rb:149:in `start'
  passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:219:in `block (2 levels) in spawn_rails_application'
  passenger (3.0.11) lib/phusion_passenger/abstract_server_collection.rb:132:in `lookup_or_add'
  passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:214:in `block in spawn_rails_application'
  passenger (3.0.11) lib/phusion_passenger/abstract_server_collection.rb:82:in `block in synchronize'
  <internal:prelude>:10:in `synchronize'
  passenger (3.0.11) lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
  passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:213:in `spawn_rails_application'
  passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:132:in `spawn_application'
  passenger (3.0.11) lib/phusion_passenger/spawn_manager.rb:275:in `handle_spawn_application'
  passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:357:in `server_main_loop'
  passenger (3.0.11) lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously'
  passenger (3.0.11) helper-scripts/passenger-spawn-server:99:in `<main>'

ОБНОВЛЕНИЕ

Я добавил приведенный ниже код в свой файл config/application.rb, как предложено здесь, и он помог отобразить некоторые файлы, но я все еще не могу загрузить файл через приложение, и часть этой трассировки стека показана ниже.

config/application.rb содержит это

initializer 'override-image-magick-paths', :after => 'attach-refinery-images-with-
    dragonfly' do
      app=Dragonfly[:refinery_images]
      app.configure_with(:imagemagick)
      app.configure do |c|
        c.convert_command = "/usr/local/bin/convert"          # defaults to "convert"
        c.identify_command = "/usr/local/bin/identify"        # defaults to "identify"
      end
    end

трассировки стека

 Dragonfly::Shell::CommandFailed (Command failed (identify '/tmp/RackMultipart20120708-20096-4m1k9j') with exit status 127):
      dragonfly (0.9.12) lib/dragonfly/shell.rb:29:in `raise_shell_command_failed'
      dragonfly (0.9.12) lib/dragonfly/shell.rb:23:in `run'
      dragonfly (0.9.12) lib/dragonfly/image_magick/utils.rb:34:in `raw_identify'
      dragonfly (0.9.12) lib/dragonfly/image_magick/utils.rb:24:in `identify'
      dragonfly (0.9.12) lib/dragonfly/image_magick/analyser.rb:44:in `format'
      dragonfly (0.9.12) lib/dragonfly/function_manager.rb:39:in `call'
      dragonfly (0.9.12) lib/dragonfly/function_manager.rb:39:in `block (2 levels) in call_last'
      dragonfly (0.9.12) lib/dragonfly/function_manager.rb:38:in `catch'
      dragonfly (0.9.12) lib/dragonfly/function_manager.rb:38:in `block in call_last'
      dragonfly (0.9.12) lib/dragonfly/function_manager.rb:37:in `each'
      dragonfly (0.9.12) lib/dragonfly/function_manager.rb:37:in `call_last'
      dragonfly (0.9.12) lib/dragonfly/analyser.rb:25:in `analyse'
      dragonfly (0.9.12) lib/dragonfly/job.rb:247:in `analyse'

person Catfish    schedule 06.07.2012    source источник
comment
Есть ли /usr/local/bin в вашем $PATH?   -  person Todd Baur    schedule 11.07.2012
comment
Да, это на моем пути. Я опубликую весь свой путь, когда вернусь домой.   -  person Catfish    schedule 11.07.2012
comment
Ну, вы можете при желании установить $magick_home в своей среде, но я не думаю, что это решит эту проблему. Какие бы параметры Dragonfly не отправляла для идентификации, ей это не нравится. Попробуйте сохранить модель из консоли rails и выполнить отладку оттуда, мне любопытно увидеть выходные параметры для идентификации двоичного файла.   -  person Todd Baur    schedule 11.07.2012
comment
Можете ли вы предоставить мне подробные шаги, чтобы сделать это? Я новичок в рельсах и не уверен, что точно следую тому, что мне нужно делать.   -  person Catfish    schedule 11.07.2012
comment
Что ж, в этом случае, когда вы выполняете загрузку, вы должны увидеть в своем терминале вывод команды. Я опубликую пример модели, которая у меня есть, которая работает.   -  person Todd Baur    schedule 11.07.2012


Ответы (4)


Я просто переустановил imagemagick и все заработало.

person nil    schedule 05.05.2013

Я создал символическую ссылку из /usr/bin/convert -> /usr/local/bin/convert и из /usr/bin/identify -> /usr/local/bin/identify, и это, похоже, решило мои проблемы.

$ cd /usr/bin
$ ln -s /usr/local/bin/convert convert
$ ln -s /usr/local/bin/identify identify 

Я предполагаю, что стрекоза все еще не определяет мое местоположение для преобразования и идентификации, хотя я указал его в своем файле config/application.rb.

person Catfish    schedule 09.07.2012
comment
Это сработало и для меня. Другой способ — изменить путь в lib/dragonfly/image_magick/utils.rb, configurable_attr :convert_command, /usr/local/bin/convert configurable_attr :identify_command, /usr/local/bin/identify, но мне так больше нравится. Очиститель. - person Houen; 16.07.2012
comment
На самом деле, похоже, вы получили это задом наперед. Вы создаете символическую ссылку ОТ /usr/local/bin/... К /usr/bin/... Это означает, что это не должно быть необходимо, например, для Ubuntu, где apt автоматически конвертирует/идентифицирует эти пути - person Houen; 16.07.2012
comment
Из всех исследований, которые я просмотрел по этой проблеме, похоже, что это проблема Centos. - person Catfish; 17.07.2012
comment
Это также случилось со мной в OSX Lion. Дело не в RefineryCMS, а в лежащей в основе проблеме Dragonfly. - person Houen; 17.07.2012

Возможно, вам придется указать полный путь к convert:

config/initializers/dragonfly.rb:

app.configure do |c|
  c.convert_command = "/usr/bin/convert"
end

Измените /usr/bin/convert на правильный путь к convert, который вы можете узнать, запустив whereis convert на вашей оболочке VPS.

Дополнительные сведения см. в документации.

person Tanzeeb Khalili    schedule 06.07.2012
comment
вы, вероятно, правы насчет стрекозы, но как я могу сделать так, чтобы нефтеперерабатывающий завод подхватил ее? Я продолжаю получать страницу с ошибкой пассажира с кодом, который вы мне предоставили. - person Catfish; 06.07.2012
comment
Refinery может забрать его следующим образом: github.com/resolve/refinerycms/issues/ 1781#issuecomment-6816678 - person parndt; 07.07.2012

Попробуйте установить гем Refinery-images:

Gemfile:
   gem 'refinerycms-page-images', '~>1.0.3' //refinery v1 compatible (v2 available also)

Затем в вашей модели:

belongs_to :imagesizeyouwant, :class_name => 'Image'

Если вы посмотрите на класс Image, вы увидите довольно хорошую настройку для обработки изображений. Вы можете добавить размеры изображений на странице настроек Refinery в инструменте администрирования. Если у вас есть собственный движок, просто измените :imagesizeyouwant на этот размер (мой был :thumbnail).

Когда вы публикуете изображение, посмотрите на вывод команды идентификации и попробуйте запустить ее самостоятельно. Скорее всего, ваша система имеет другие параметры, которые она использует для двоичных файлов ImageMagick, или что размеры, отправляемые ей, непонятны. Попробуйте опубликовать вывод фактической команды, которую Dragonfly вызывает в оболочке, чтобы мы могли лучше рассмотреть.

person Todd Baur    schedule 11.07.2012