【问题标题】:Ruby gems in lib - spare tire principlelib中的Ruby gems-备用轮胎原理
【发布时间】:2010-05-09 16:23:59
【问题描述】:

我正在开发一个控制台 ruby​​ 应用程序(不是 rails!)我将在多台机器上安装这个应用程序。我想知道是否有一种方法可以构建它,这样我就不必在每台机器上安装我用于应用程序的 gem。我希望能够将目录复制到每台机器并运行它。理想情况下,我想将 gem 放在 lib 文件夹或其他东西中并从那里引用它们,所以我什至不必将它们安装在我的开发机器上。有没有办法做到这一点?

在 .net 中,我们称之为“备胎”原则。

谢谢, 克雷格

【问题讨论】:

标签: ruby console rubygems


【解决方案1】:

bundler怎么样?

然后你可以包含一个 Gemfile 来指定所有必要的 gem,然后在每台机器上运行“bundle install”来将它们拉下来。

如果您真的想将它们与应用程序捆绑在一起,请运行 "bundle package",gem 将存储在 vendor/cache 中。

【讨论】:

  • 我已经看过了,可能是我最终要走的路。我只是想知道是否没有简单的方法可以将 gem 复制到我的 lib 文件夹中,这样就不必下载它们了?在其他语言中,这真的很容易。
  • 刚刚更新了我的答案以显示“捆绑包”,它将宝石打包到供应商/缓存。
  • 好吧,我把它打包并将我的东西从我的 mac 复制到 linux 服务器。比我必须安装 ruby​​gems 和 bundler 本身,因为似乎没有办法捆绑,bundler。之后我尝试再次运行该应用程序,但我收到一条错误消息,提示“sequel 不是已安装的 gem”或类似的东西,即使我将 sequel 及其在我的 gemfile 中捆绑在一起。有什么想法吗?
【解决方案2】:

您可以采用与 rails 允许的方法相同的方法并“供应”您的 gem。这包括创建一个新目录(rails 使用 vendor/gems)并使用 gem unpack 将 gem 解压到该目录中。

然后配置加载路径以包含其下方的所有子文件夹。

编辑

您可以通过执行以下操作来配置加载路径

Dir.glob(File.join("vendor", "gems", "*", "lib")).each do |lib|
  $LOAD_PATH.unshift(File.expand_path(lib))
end

【讨论】:

  • 由于 Bundler 包含一个解压宝石的选项,我会使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 2013-07-23
相关资源
最近更新 更多