3 Stimmen

ImageScience bricht beim Update auf Rails 3 ab

Ich hatte eine funktionierende (und gut funktionierende) ImageScience-Installation, die eine einfache Größenanpassung von Bildern an verschiedene Dimensionen ermöglichte und sie dann in verschiedene Verzeichnisse kopierte. Alles sehr einfach. Diese kleine und einfache Routine befand sich in einem Rake-Task. Nach dem Update auf Rails 3 funktioniert dieser Rake-Task immer noch (es macht einige AR-Einfügungen und Audio-Encoding sowie), aber die image_science erfordern scheitert mit einer Meldung wie diese,

"require on /home//.ruby_inline/Inline_ImageScience_cdab.so failed"

Ich habe eine fehlerhafte ImageScience-Installation ausgeschlossen, da ich in IRB einige einfache Aufrufe an ImageScience vornehmen und Miniaturansichten erstellen kann. Der Rest der Rake-Aufgabe funktioniert genauso gut wie vorher, wenn ich jeden Hinweis auf die Notwendigkeit von "image_science" oder die ImageScience-Routine auskommentiere.

die Ausgabe von rake bei einem Fehler ist diese,

/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>

das Rakefile in der Rails-App Root ist ein Standard Rails 3 Rakefile, wie dieses,

# 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

die letzte Zeile ist Zeile 7.

Ich bin etwas ratlos, woran es liegt, und Google scheint nichts zu finden. Weiß jemand, warum RubyInline sich beschwert? Oder warum dieser einst funktionierende Rake-Task plötzlich unglücklich ist, wie ImageScience aufgerufen wird? OS ist Ubuntu 10.10, aber es war alles funktioniert vor dem Rails 3 Upgrade.

Vielen Dank im Voraus

2voto

Larry Punkte 56

Dies scheint das Problem zu sein, aber es gibt eine einfachere Lösung, die ich beim Durchlesen der Kommentare unter carlhuda Ausgaben 431

Ich hatte das gleiche Problem und es hat funktioniert. Ändern Sie einfach die require Methode zu sein Kernel.require .

Danach ist es nicht mehr nötig, Ihren Code mit require image_science Erklärungen.

1voto

artemave Punkte 6516

Es gibt eine Lösung, aber Sie müssen einige Hürden überwinden.

Erste Verzögerung image_science laden:

gem 'image_science', :require => false

Dann Affenpflaster ruby-inline (die image_science angewiesen ist). Platzieren Sie diesen Code in 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

Dann require 'image_science' wo auch immer Sie es verwenden. Und voila.

0voto

Tilo Punkte 32417

Eine Anmerkung zur Antwort von aremave:

Es sieht so aus, als hätte der ursprüngliche Code einen Fehler! Er verwendet keine Short-Cut-Evaluierung!

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

Beachten Sie den || , der die Auswertung des logischen Ausdrucks beendet, wenn der erste Teil wahr ist. Wenn an der gleichen Stelle ein 'oder' steht, wird der zweite Teil des Ausdrucks immer ausgewertet, daher der Fehler, den Sie sehen...

0voto

Thiago Diniz Punkte 2959

Wie gesehen bei Bundler Issue Tracker hat es bei mir funktioniert.

Richten Sie Ihre gem-Datei auf https://github.com/asynchrony/image_science Wir haben die Bildwissenschaft ohne Ruby inline neu aufgebaut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X