gpt4 book ai didi

ruby - gem 中 require 的问题

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:11 25 4
gpt4 key购买 nike

我正在尝试制作一个具有一些模块的简单 gem。但是,在我构建并安装 gem 并尝试在脚本中要求它之后,我收到一个错误:

from ...ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- my_gem/some_class (LoadError)

from ...ruby-1.9.3-p429/gems/my_gem-0.0.1/lib/my_gem.rb:2:in `<top (required)>'

my_gem.rb 中的第 2 行是require "my_gem/some_class

据我了解(from this question),问题似乎是找不到我需要的文件。

这是怎么回事?为什么我不能在 gem 中要求我自己的文件?


我想要的文件在 version.rb“旁边”。

#File Structure
#
# root
# |->lib
# | |->my_gem.rb
# | |->my_gem
# | | |->some_class.rb
# | | |->some_class2.rb
# | | |->version.rb

SomeClass 看起来像这样:

module MyGem
class SomeClass
def self.someMethod
...
end
end

我在出现错误的脚本中所做的全部如下:

#!/usr/bin/ruby

require "rubygems"
require "my_gem"

gem 规范:

# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'my_gem/version'

Gem::Specification.new do |spec|
spec.name = "my_gem"
spec.version = MyGem::VERSION
spec.authors = ["My Name"]
spec.email = ["my_email@gmail.com"]
spec.description = %q{A simple Ruby gem that fails.}
spec.summary = %q{Failing gem for Ruby.}
spec.homepage = "http://some.website.com"
spec.license = "MIT"

spec.files = `git ls-files`.split($/)
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]

spec.add_development_dependency "bundler", "~> 1.3"
spec.add_development_dependency "rake"
end

最佳答案

看起来您还没有将类文件添加到 git , 而你的 Gemspec file 使用通用模式指定要添加到 gem 的文件:

spec.files = `git ls-files`.split($/)

您有两个选择可以避免再次遇到同样的麻烦:

  • 在构建 gem 之前将所有文件添加到版本控制中;
  • 使用手写spec.files列于Gemspec .

或者,如果您使用的是 svn ,您可能想要更改 spec.files到:

spec.files = `svn list`.split($/)

希望对您有所帮助。

关于ruby - gem 中 require 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20467605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com