2011-12-26 104 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