3

ImageScience をインストールして、さまざまなサイズの画像に簡単にサイズ変更し、それらを別のディレクトリにコピーしました。すべて非常に簡単です。この小さくて単純なルーチンは、レーキ タスクにありました。Rails 3 に更新しても、この rake タスクは引き続き機能します (AR 挿入とオーディオ エンコーディングも実行します) が、image_science の require は次のようなメッセージで失敗します。

"require on /home//.ruby_inline/Inline_ImageScience_cdab.so に失敗しました"

IRB にアクセスして ImageScience を簡単に呼び出してサムネイルを作成できるので、ダフな 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>

Rails アプリのルートにある 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 行目です。

何が壊れているのか、ちょっと困惑しているし、Google は何も流していないようだ。RubyInline が不平を言っている理由を知っている人はいますか? または、このかつては機能していた Rake タスクが、ImageScience の呼び出し方法に突然不満を感じたのはなぜでしょうか? OS は Ubuntu 10.10 ですが、Rails 3 にアップグレードする前はすべて動作していました。

前もって感謝します

4

4 に答える 4

2

これは問題のようですが、 carlhudaissue431のコメントを熟読して見つけたより簡単な修正があります。

私は同じ問題を抱えていました、そしてそれは私のために働きました。requireメソッドをに変更するだけKernel.requireです。

その後、コードにrequire image_scienceステートメントを追加する必要はありません。

于 2011-04-04T13:37:07.070 に答える
1

修正はありますが、いくつかのフープをジャンプする必要があります。

最初の遅延image_scienceロード:

gem 'image_science', :require => false

次に、モンキーパッチruby-inlineimage_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の回答に関する1つのメモ:

元のコードにバグがあるようです。ショートカット評価を使用していません!

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

||に注意してください 、最初の部分がtrueの場合、論理式の評価を停止します。同じ場所に「または」がある場合、式の2番目の部分は常に評価されるため、表示されるエラーは...

于 2011-04-24T16:51:00.230 に答える
0

bundler issue trackerで見られるように、私にとってはうまくいきました。

gem ファイルをhttps://github.com/asynchrony/image_scienceに指定します。ルビをインライン化せずにイメージ サイエンスを再構築しました。

于 2011-05-06T04:12:19.210 に答える