Ruby on rails gem规范名称必须等于gem常量名称吗? tl;博士
我试图突破一个更大的应用程序的一部分,作为一个可安装的引擎。引擎将以不同的风格存在,每种风格都包含在各自的宝石中。我无法获取gem名称,因为它与引擎常量名称不同 细节 提取的部分包含用于注册、身份验证和会话处理的逻辑。世界各地的客户使用该应用程序,对使用该产品的最终客户有不同的要求和规定。这促使我们为每个监管区域的这些需求创建单独的模块。它们当前位于lib目录中,根据配置加载不同的实现 引擎的目标是装载适当的引擎,路由文件将所有相关调用路由到引擎 因为我们有几个这样的注册模块,还有更多,我们需要为变体维护几个gem。我试图使gem具有不同的名称(auth_A、auth_B等),但包含的引擎具有相同的contant名称auth::engine 这样,我们就可以在gem文件中包含正确的gem,其余的就可以了,因为无论运行哪个版本,它应该路由到的端点总是相同的 问题 我遇到的问题是,我无法通过接缝使gem有一个名称,而引擎常数有另一个 如果我生成了一个新的引擎namesauth,那么在主应用程序中挂载它就可以了。如果我随后将gem名称和包含文件夹更改为auth_a并更新主机应用程序Gemfile,它将停止工作,我可以很好地绑定,但是当我尝试启动主机应用程序时,当它绑定到装载引擎时失败,抱怨auth::engine是一个未定义的常量 我的gemspec略作修改,如下所示:Ruby on rails gem规范名称必须等于gem常量名称吗? tl;博士,ruby-on-rails,rubygems,ruby-on-rails-3.2,gem,gemspecs,Ruby On Rails,Rubygems,Ruby On Rails 3.2,Gem,Gemspecs,我试图突破一个更大的应用程序的一部分,作为一个可安装的引擎。引擎将以不同的风格存在,每种风格都包含在各自的宝石中。我无法获取gem名称,因为它与引擎常量名称不同 细节 提取的部分包含用于注册、身份验证和会话处理的逻辑。世界各地的客户使用该应用程序,对使用该产品的最终客户有不同的要求和规定。这促使我们为每个监管区域的这些需求创建单独的模块。它们当前位于lib目录中,根据配置加载不同的实现 引擎的目标是装载适当的引擎,路由文件将所有相关调用路由到引擎 因为我们有几个这样的注册模块,还有更多,我们需要
$:.push File.expand_path("../lib", __FILE__)
# Maintain your gem's version:
require "auth/version"
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
s.name = "auth_a"
s.version = Auth::VERSION
s.authors = ["Jonas Schubert Erlandsson"]
s.email = ["jonas.schubert.erlandsson@xxxxxx.com"]
s.homepage = "http://some.page.on/the/internet.html"
s.summary = "Authentication module for A"
s.description = "This engine, when mounted in Host app, handles registration, account update, login and logout of users."
s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"]
s.test_files = Dir["test/**/*"]
s.add_dependency "rails", "~> 3.2.13"
end
我对生成的脚手架所做的唯一更改是s.name=“auth\u a”
。主机应用程序Gemfile的相关行:gem'auth\u a',路径:“../auth\u a”
我查看了整个源代码树,试图找到它从gem名称中推断出名称的位置,但我看不到它。我不知道我遗漏了什么,而gem规范文档对此也没有多大帮助。。。我不认为gem的名字和gem的常量名字有联系,但也许我错了?你能覆盖它吗?还是我遗漏了什么?答案是简单地将它添加到主机应用程序Gemfile中的行:
gem'auth\u a',路径:../auth\u a',require'auth'
所以它看起来默认为require,即自动加载,一个基于gem名称的常量,但是require调用告诉它需要什么
希望它也能帮助其他人:)