gpt4 book ai didi

ruby-on-rails - 自定义 gem 未加载到 Rails 应用程序中

转载 作者:太空宇宙 更新时间:2023-11-03 16:15:16 25 4
gpt4 key购买 nike

我已将 gem 推送到 github 和 ruby​​gems,但该 gem 的常量未加载到 rails 应用程序中。通过从多个来源加载进行尝试,结果如下:

  • rubygems = 未加载
  • github = 未加载
  • 本地路径 = 已加载

有趣的是,当我使用 ruby​​gems/github 加载时,我可以使用 require 'module/gem_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 不会自动加载,因为主文件 (gem_name.rb) 不在 lib 目录的根目录中。建议您的 Gem 遵循以下结构:

% tree
.
├── gem_name.gemspec
└── lib
├── gem_name
│ └── some_file.rb
│ └── other_file.rb
└── gem_name.rb

你有一个额外的 module 嵌套。在 Rails application.rb 中,您应该看到 Bundler.require(*Rails.groups)。这是什么method确实是遍历 Gemfile 中的每个 Gem 并调用 require gem_name。这适用于遵循上述约定的 Gem。您的 gem 没有 - 因此 Bundler 完成的自动要求找不到要使用的正确文件。

参见 Ruby Gems Guide用于创建您自己的 Gem,以获取有关正确组织代码的更多信息。

如果您不想更改应用程序的结构,请添加在初始化器或 Gemfile 中需要“module/gem_name”:

gem "gem_name", require: "module/gem_name"

关于ruby-on-rails - 自定义 gem 未加载到 Rails 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47185973/

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