Ruby on rails 自定义gem未加载到rails应用程序
我已经将gem推到github&rubygems中,但该gem的常量并没有加载到rails应用程序中。尝试从多个源加载,结果如下:Ruby on rails 自定义gem未加载到rails应用程序,ruby-on-rails,ruby,rubygems,Ruby On Rails,Ruby,Rubygems,我已经将gem推到github&rubygems中,但该gem的常量并没有加载到rails应用程序中。尝试从多个源加载,结果如下: rubygems=未加载 github=未加载 本地路径=已加载 有趣的是,当我使用rubygems/github加载时,我可以使用require'module/gem\u name' 在我看来,gemspecs很不错: # coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.u
- rubygems=未加载
- github=未加载
- 本地路径=已加载
require'module/gem\u name'
在我看来,gemspecs很不错:
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'module/gem_name/version'
Gem::Specification.new do |spec|
spec.name = 'gem_name'
spec.version = Module::GemName::VERSION
spec.authors = ['Mike QWERTY']
spec.email = ['mike.qwerty@gamil.com']
spec.summary = 'some_desc'
spec.homepage = 'https://github.com/mike/gem-name'
spec.license = 'MIT'
if spec.respond_to?(:metadata)
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
else
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
end
spec.files = `git ls-files -z`.split("\x0").reject do |f|
f.match(%r{^(test|spec|features)/})
end
spec.bindir = 'exe'
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ['lib']
spec.required_ruby_version = '>= 2.4.0'
spec.add_runtime_dependency 'graphql', '>= 1.6.0'
spec.add_development_dependency 'bundler', '~> 1.14'
spec.add_development_dependency 'rake', '~> 10.0'
spec.add_development_dependency 'rspec', '~> 3.0'
end
结构如下:
lib/module/gem_name/stuff/others.rb
lib/module/gem_name/extras.rb
lib/module/gem_name.rb
另外,我一直在基于其他具有相同模块名的gem开发这个gem。但若这很重要,它会正确加载到应用程序中。
有什么想法吗?由于主文件(
gem\u name.rb
)不在lib
目录的根目录下,所以gem没有自动加载。建议您的创业板遵循以下结构:
% tree
.
├── gem_name.gemspec
└── lib
├── gem_name
│ └── some_file.rb
│ └── other_file.rb
└── gem_name.rb
您有一个额外的模块
嵌套。在Railsapplication.rb
中,您应该看到Bundler.require(*Rails.groups)
。这样做的目的是循环遍历Gem文件中的每个Gem,并调用requiregem\u name
。这适用于遵循上述约定的Gem。您的gem没有-因此Bundler执行的自动请求找不到要使用的正确文件
有关正确代码组织的更多信息,请参阅创建您自己的Gem
如果不想更改应用程序的结构,请添加
在初始值设定项中或gem文件中要求“模块/gem\u名称”
:
gem "gem_name", require: "module/gem_name"
如果将
require'module/gem_name'
粘贴在application.rb的顶部,它是否工作?是。我想知道为什么它不能自动加载。嘿,谢谢你的回答。我知道如何在Gemfile中使用额外的require来实现这一点,但请看一下这一点:。不需要任何额外的东西,而且它是开箱即用的。我遗漏了什么吗?你认为回购协议的名称必须与gem_名称的价值相同吗?