0

我知道如果应用程序使用捆绑器,我可以通过查看 Gemfile 轻松找到所有已安装的 gem。

比如说,我正在查看不使用 bundler 的 Rails 3 应用程序,我怎么知道它使用了哪些 gem?

谢谢

4

1 回答 1

2

如果它不使用 Bundler,我不知道有确定的方法来识别正在使用的每个 gem。您可以搜索整个应用程序树以查找require要开始的语句,但这不会显示其中的大部分。Gems 在内部也需要其他 gems,并且会安装它们自己的依赖项,但是这些 gems 不会直接从您的应用程序的require语句中引用。

如果应用程序正常工作并且测试通过(意味着您至少安装了所有必需的 gem),您可以通过创建一个Gemfile,列出您知道需要的 gem,然后运行您的测试(或应用程序本身)来解决问题) via bundle exec,这将确保只有 中列出的宝石Gemfile是可见的。然后你会得到与丢失宝石相关的失败,并且可以将它们添加到Gemfile所有工作之前。一旦它通过 工作bundle exec,您就会知道您已经捕获了那里的所有需求。

如果您使用的是 RVM,您可能会发现为您的应用程序创建 gemset 以及.rvmrc应用程序根目录中的文件以利用 RVM 的自动 gemset 切换和 Bundler 集成很有帮助。它将更容易维护 gem 的状态。

在任何情况下,gem list在工作状态下运行应用程序都会向您显示它可能正在使用的所有 gem,但在没有限定到 gemset 或包装在的情况下bundle exec,您还将看到由于其他原因而安装的 gem,这些原因可能有与您的应用程序的依赖项无关。

于 2013-03-16T21:46:04.753 回答