从 Rails 类 创建 Ruby Gem 以在 Sinatra 中使用
Create Ruby Gem from Rails classes to use in Sinatra
我正在尝试从 Rails 应用程序中提取几个 类 到它自己的 Gem 中,以便我可以重用 Sinatra 应用程序中的代码。
在 Rails 应用程序中,我有以下结构:
app > classes > api > (bunch of folders and subfiles)
我正在尝试将 api
文件夹移动到 gem,为此我使用捆绑器创建了一个新的 gem:
bundle gem myapp-core --no-exe --no-coc --no-mit --no-ext
所以我最终得到了这样的文件结构:
myapp-core > lib > myapp > core > version.rb
myapp-core > lib > myapp > core.rb
我已将 api
文件夹复制到 myapp-core > lib > myapp > api
并尝试从 sinatra 中 require
执行以下操作:
require 'myapp/api/somefile.rb'
但这没有用,我当然已经将 gem 添加到 sinatra 应用程序的 Gem 文件中。
我尝试了将文件夹放在哪里以及如何在其中获取文件的各种组合,但我得到 cannot load such file
或 uninitialized constant Api (NameError)
.
正确的方法是什么,以便理想地从 Sinatra 和 Rails 我将 gem 添加到 Gem 文件,需要我需要的任何文件使用这些 API 文件的代码将保持不变还是尽可能少地更改?
如果没有 Rails 自动加载器,您将需要自己建立所有中间 class 和模块组件。
这通常意味着您需要声明如下内容:
module Api
class Somefile
# ...
end
end
自动声明 Api
模块的地方,允许您直接要求 lib/api/somefile
,或者您需要将此责任转移到链上:
# lib/api.rb
module Api
# ...
end
require_relative './api/somefile'
在任何依赖项中自动加载的地方,你现在做 require 'api'
,假设你的 $LOAD_PATH
包含这个特定的 lib/
路径。
我正在尝试从 Rails 应用程序中提取几个 类 到它自己的 Gem 中,以便我可以重用 Sinatra 应用程序中的代码。
在 Rails 应用程序中,我有以下结构:
app > classes > api > (bunch of folders and subfiles)
我正在尝试将 api
文件夹移动到 gem,为此我使用捆绑器创建了一个新的 gem:
bundle gem myapp-core --no-exe --no-coc --no-mit --no-ext
所以我最终得到了这样的文件结构:
myapp-core > lib > myapp > core > version.rb
myapp-core > lib > myapp > core.rb
我已将 api
文件夹复制到 myapp-core > lib > myapp > api
并尝试从 sinatra 中 require
执行以下操作:
require 'myapp/api/somefile.rb'
但这没有用,我当然已经将 gem 添加到 sinatra 应用程序的 Gem 文件中。
我尝试了将文件夹放在哪里以及如何在其中获取文件的各种组合,但我得到 cannot load such file
或 uninitialized constant Api (NameError)
.
正确的方法是什么,以便理想地从 Sinatra 和 Rails 我将 gem 添加到 Gem 文件,需要我需要的任何文件使用这些 API 文件的代码将保持不变还是尽可能少地更改?
如果没有 Rails 自动加载器,您将需要自己建立所有中间 class 和模块组件。
这通常意味着您需要声明如下内容:
module Api
class Somefile
# ...
end
end
自动声明 Api
模块的地方,允许您直接要求 lib/api/somefile
,或者您需要将此责任转移到链上:
# lib/api.rb
module Api
# ...
end
require_relative './api/somefile'
在任何依赖项中自动加载的地方,你现在做 require 'api'
,假设你的 $LOAD_PATH
包含这个特定的 lib/
路径。