0
我有一個試圖使用gnuplot gem的Rails應用程序,但Rails不會加載它。它在我的Gemfile中,我使用軟件包安裝進行安裝。捆綁知道這事:Ruby文件在搜索路徑中,但無法通過'require'找到
vp117025:src tim$ bundle show gnuplot
/Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/gnuplot-2.3.6
但它不會出現在Rails的控制檯(而不是從我的應用程序訪問),即使在一個明確的要求,這不應該是必要的。
vp117025:src tim$ rails console
Loading development environment (Rails 3.1.0)
ruby-1.9.2-p290 :001 > require 'gnuplot'
=> false
ruby-1.9.2-p290 :002 > require 'gnuplot.rb'
=> false
現在,請檢查模塊的名稱是否在常數表:
ruby-1.9.2-p290 :003 > Module.constants.include? :Gnuplot
=> false
它不是!該模塊不能真正被訪問。即使require搜索路徑包含保存gnuplot.rb的目錄,也會發生這種情況。
ruby-1.9.2-p290 :004 > $:.include? "/Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/gnuplot-2.3.6/lib"
=> true
如果我明確包含文件的完整路徑,它的工作原理!
ruby-1.9.2-p290 :005 > require "/Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/gnuplot-2.3.6/lib/gnuplot.rb"
=> true
ruby-1.9.2-p290 :006 > Module.constants.include? :Gnuplot
=> true
模塊現在對解釋器可見。它在Rails之外運行得很好。
vp117025:src tim$ irb -rubygems -r gnuplot
ruby-1.9.2-p290 :001 > Module.constants.include? :Gnuplot
=> true
爲什麼Rails環境不能加載gnuplot.rb,即使它的父目錄在搜索路徑中?
感謝您的回覆。但看看我爲'Module.constants.include做的測試? :Gnuplot' - Gnuplot模塊似乎無法被解釋器訪問,直到我需要該文件的絕對路徑。此外,當我啓動rails控制檯時,如果我嘗試訪問Gnuplot模塊中的某些內容(例如Gnuplot :: gnuplot),則會得到NameError:未初始化的常量Gnuplot。但是,通過絕對路徑需要文件後,該調用正常工作。 –
嗯。我無法複製。我剛做了一個新的Rails應用程序,添加了Gnuplot,打開了控制檯,並加載了它。你在用什麼版本的Rails? –
感謝您的努力!您的評論啓發我找出最接近的原因 - 一個新鮮的Rails應用程序只有gnuplot工作正常,但將我的Gemfile複製到新項目中破壞了它。一次一個地註釋出寶石表明問題是gsl和gnuplot gem之間的不良反應 - 當gsl gem首先被加載時,gsl gem中的某些東西阻止了Gnuplot命名空間的正確顯示。真讓人頭痛,但現在我知道該怎麼辦了! –