ImageScience ломается при обновлении до Rails 3 - PullRequest
3 голосов
/ 26 ноября 2010

У меня была работающая (и хорошо работающая) установка ImageScience, которая делала простое изменение размера изображений различных размеров, а затем копировала их в разные каталоги.Все очень просто.Эта маленькая и простая рутина стояла на граблях.После обновления до Rails 3 эта задача rake будет по-прежнему работать (она также выполняет некоторые вставки AR и кодирование звука), но с помощью image_science требуется выполнить сбой с таким сообщением, как

"require on / home //.ruby_inline / Inline_ImageScience_cdab.so не удалось "

Я исключил неудачную установку ImageScience, поскольку я могу зайти в IRB и сделать несколько простых вызовов ImageScience и сделать миниатюры.Остальная часть задачи rake работает так же, как и раньше, если я закомментирую упоминание о необходимости 'image_science' или подпрограммы ImageScience.

вывод из rake при сбое следующий:

/var/lib/gems/1.8/gems/RubyInline-3.8.6/lib/inline.rb:513:in `load'
/var/lib/gems/1.8/gems/RubyInline-3.8.6/lib/inline.rb:829:in `inline'
/var/lib/gems/1.8/gems/image_science-1.2.1/lib/image_science.rb:90
...
<active_support complaints >
...
/home/<user>/RailsApps/marlow/lib/tasks/flac_import.rake:2
...
<rails complaints>
...
/home/<user>/RailsApps/marlow/Rakefile:7
...
<standard complaints to end>

Rakefile в корне приложения rails - это стандартный и стандартный Rails 3 Rakefile, например,

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require File.expand_path('../config/application', __FILE__)
require 'rake'

Marlow::Application.load_tasks

последняя строка - строка 7.

Я немного озадаченотносительно того, что ломает это, и Google, кажется, ничего не теряет.Кто-нибудь знает, почему RubyInline жалуется?Или почему эта однажды работающая задача Rake внезапно перестала работать, как называется ImageScience?Операционная система - Ubuntu 10.10, но она все работала до обновления Rails 3.

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 04 апреля 2011

Кажется, это проблема, но есть более простое исправление, которое я нашел, просмотрев комментарии по carlhuda Issues 431

У меня была такая же проблема, и она работала для меня.Просто измените метод require на Kernel.require.

После этого вам не нужно добавлять ваш код в операторы require image_science.

1 голос
/ 17 декабря 2010

Исправление есть, но вам нужно прыгнуть через несколько обручей.

Первая задержка image_science нагрузка:

gem 'image_science', :require => false

Затем патч обезьяны ruby-inline (на который опирается image_science ).Поместите этот код в config / initializers / ruby_inline_hack.rb:

class Inline::C
  def load
    require "#{so_name}"
    #below is the original version which breaks
    #require "#{so_name}" or raise LoadError, "require on #{so_name} failed"
  end
end

Затем require 'image_science' везде, где вы его используете.И вуаля.

0 голосов
/ 06 мая 2011

как видно на трекере проблем с упаковщиками , у меня это сработало.

Укажите в вашем файле gem значение https://github.com/asynchrony/image_science Мы перестроили науку об изображении без рубиновой строки.

0 голосов
/ 24 апреля 2011

Одна записка об ответе арема:

Похоже, в исходном коде есть ошибка! Он не использует кратковременную оценку!

class Inline::C
  def load
    require "#{so_name}" || raise LoadError, "require on #{so_name} failed"
  end
end

Обратите внимание на || , который остановит оценку логического выражения, если первая часть верна. Если в том же месте есть «или», вторая часть выражения всегда будет оцениваться, отсюда и ошибка, которую вы видите ...

...