2013-07-30 28 views
11

我會解釋我的情況。如何從任何地方需要一些lib文件

這裏是我的文件樹在我的Rails應用程序:

的lib/my_module.rb

require 'my_module/my_file' 

module My_module 

end 

的lib/my_module/my_file.rb

class Tweetag::Collector 
    (...) 
end 

我做了一個紅寶石腳本,我已經把配置/作業/

我真的不明白我應該如何要求文件my_file.rb在這個文件中。

require '../../my_module/my_file.rb' 

它給我`需要':無法加載此類文件

同樣的錯誤只需要‘my_module’這是我在我的控制器做......這裏

有人來解釋我 ?非常感謝

回答

11

可以的lib folder下autoinclude一切,並避免這些問題:

鍵入此您在config/application.rb

config.autoload_paths += %W(#{config.root}/lib) 
config.autoload_paths += Dir["#{config.root}/lib/**/"] 
+0

我做到了,但還是: '

「:未初始化不斷MyModule的(NameError) – Zoz

+0

現在包括你的模塊,你需要它,用'包括My_module' –

+0

同樣的錯誤堅持.. 。;) – Zoz

10
如果你想只需要那麼一個特定的文件

文件,

做一些相對於Rails root的操作,像這樣

for ex: -- 

lib/plan.rb 

module Plan 
...some code... 
end 

,如果你想要求它只能在一些模型,說,如果你希望它是隨處可見

在用戶模式

require "#{Rails.root}/lib/plan" 

class User < ActiveRecord::Base 
    include Plan 
end 

應用程序/模型/ user.rb

做一個解決方案是由@VecchiaSpugna

給出

,你還可以創建在配置/初始化文件夾中的ruby文件

,需要通過一個

OR

try this 

require '../../my_module/my_file' 

instead of 

require '../../my_module/my_file.rb' 

you don't need specify extension with require. 
+0

實際上,我只是明白,我不能像你剛纔所說的那樣做一些特定於rails的東西。 我非常想運行命令行「ruby my_ruby_script.rb」並且需要我的lib模塊。 – Zoz

+0

@Zoz更新了答案。 –

4

我認爲有兩種解決方案在那邊一個所有的文件。

1)將lib路徑添加到搜索路徑。 在紅寶石:

$:.unshift('../../my_module/lib') 

然後你就可以require 'my_module.rb'

我覺得Vecchia Spugna answer是我的紅寶石答案的軌道版本。 (我不熟悉rails)。

2)另一種解決方案:

在你lib/my_module.rb您需要my_file。這個文件相對於你的my_module.rb是?然後使用require_relative

require_relative './my_module/my_file' 
+0

1)是要走的路,因爲config/jobs中的工作似乎不是從他的rails應用程序中啓動的。因此,他必須自己設置負載路徑,而不是像預期的那樣,一個未使用的rails環境會爲他做這件事。 – tvw

相關問題