2011-12-26 100 views
0

我想寫一個使用打包機的寶石(以下ryan的railcast - 245)
我遵循瑞安描述的一切。我還在lib文件夾中添加了4個ruby文件,以瞭解需求如何與不同的gem搭配使用。需要不寫作寶石

我認爲它會自動要求那些放在lib文件夾中的rb文件。 但不幸的是,當我測試它會拋出一個錯誤,說 沒有這樣的文件來加載lib/myclass.rb
這是我的lorem.rb看起來像。

require 'lorem/version' 
require 'lorem/myclass' 

Module Lorem 
..... 
end 

我在想什麼?任何人都可以告訴寶石如何工作?

注意:我用它來回聲,它的工作原理。但是當我使用bulder,gemspec和所有我只是不明白爲什麼它不加載文件。

我的寶石規格提前

+0

這暗示哪裏這個myclass.rb從何而來?它在ryan的railcast - 245描述中不存在。嘗試如果文件存在,也嘗試my_class.rb – 2011-12-26 07:21:23

+0

myclass.rb是一個文件,我在lib/lorem文件夾中添加。我試圖在myclass.rb中編寫代碼,並通過要求在lorem.rb中使用它。但它沒有工作。 – 2011-12-26 08:46:11

+0

http://stackoverflow.com/questions/4516533/a-problem-with-the-require-keyword-not-finding-the-file-to-load – 2011-12-26 08:47:51

回答

1

在你gemspec文件

# -*- encoding: utf-8 -*- 
$:.push File.expand_path("../lib", __FILE__) 
require "lorem/version" 

Gem::Specification.new do |s| 
    s.name  = "lorem" 
    s.version  = Lorem::VERSION 
    s.authors  = ["My Name"] 
    s.email  = ["[email protected]"] 
    s.homepage = "" 
    s.summary  = %q{learing bundler gem} 
    s.description = %q{Learing bundler gem} 

    s.rubyforge_project = "lorem" 

    s.files   = `git ls-files`.split("\n") 
    s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") 
    s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } 
    s.require_paths = ["lib"] 

    #s.add_development_dependency "rspec" 
    #s.add_development_dependency "supermodel" 
end 

感謝,嘗試更換$:.push File.expand_path("../lib", __FILE__)

$:.unshift('lib') 
+0

我不做測試。事實上,我試圖直接通過給寶石'mygem'在鐵路項目 – 2011-12-26 14:26:51

+0

@KrishnaprasadVarma你可以發佈你的gemspec? – buruzaemon 2011-12-27 01:57:09

+0

我已經添加gemspec的問題。 – 2011-12-27 04:34:59

0

終於解決了。

lib = File.expand_path('../lib/', __FILE__) 
$:.unshift lib unless $:.include?(lib) 

,並給予內部

Gem::Specification.new do |s| 

    ... 
    s.files  = Dir.glob("{bin,lib}/**/*") 
    ... 

end 

下面我從http://yehudakatz.com/2010/04/02/using-gemspecs-as-intended/

+0

有誰知道爲什麼耙安裝不會複製lib文件夾中的所有紅寶石代碼,但只有在s.files中提到的那些代碼? – 2011-12-27 10:27:27

+1

因爲這就是's.files'的要點:這是包含在寶石中的東西列表 – 2011-12-27 10:36:51

+0

@KrishnaprasadVarma很高興聽到您能夠解決您的問題。 – buruzaemon 2011-12-27 12:07:46