3

我有一个工作(并且工作良好)的 ImageScience 安装,它对图像的各种尺寸进行了一些简单的调整,然后将它们复制到不同的目录。一切都非常简单。这个小而简单的例程是一项繁重的任务。更新到 Rails 3 后,这个 rake 任务仍然可以工作(它也会进行一些 AR 插入和音频编码),但是 image_science 要求失败并显示如下消息,

“要求 /home//.ruby_inline/Inline_ImageScience_cdab.so 失败”

我已经排除了 duff ImageScience 安装,因为我可以进入 IRB 并对 ImageScience 进行一些简单的调用并制作缩略图。如果我注释掉任何提及需要“image_science”或 ImageScience 例程的内容,则 rake 任务的其余部分可以正常工作。

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>

rails app root 中的 Rakefile 是一个标准的 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 行。

我有点不知道是什么破坏了它,而谷歌似乎并没有放弃任何东西。有谁知道为什么 RubyInline 抱怨?或者为什么这个曾经有效的 Rake 任务突然对 ImageScience 的调用方式感到不满?操作系统是 Ubuntu 10.10,但在 Rails 3 升级之前一切正常。

提前致谢

4

4 回答 4

2

这似乎是问题所在,但我通过仔细阅读 carlhuda 问题 431上的评论发现了一个更简单的解决方法

我有同样的问题,它对我有用。只需将require方法更改为Kernel.require.

之后,无需在您的代码中添加require image_science语句。

于 2011-04-04T13:37:07.070 回答
1

有一个修复,但你需要跳过几个圈。

首先延迟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'无论你在哪里使用它。瞧。

于 2010-12-17T17:33:00.217 回答
0

关于aremave答案的一个注释:

看起来原始代码有一个错误!它没有使用捷径评估!

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

注意 || ,如果第一部分为真,它将停止对逻辑表达式的评估。如果在同一个地方有一个“或”,则表达式的第二部分将始终被评估,因此您看到的错误......

于 2011-04-24T16:51:00.230 回答
0

正如在bundler issue tracker上看到的那样,它对我有用。

将您的 gem 文件指向https://github.com/asynchrony/image_science我们在没有 ruby​​ 内联的情况下重建了图像科学。

于 2011-05-06T04:12:19.210 回答