我知道如果应用程序使用捆绑器,我可以通过查看 Gemfile 轻松找到所有已安装的 gem。
比如说,我正在查看不使用 bundler 的 Rails 3 应用程序,我怎么知道它使用了哪些 gem?
谢谢
我知道如果应用程序使用捆绑器,我可以通过查看 Gemfile 轻松找到所有已安装的 gem。
比如说,我正在查看不使用 bundler 的 Rails 3 应用程序,我怎么知道它使用了哪些 gem?
谢谢
如果它不使用 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,这些原因可能有与您的应用程序的依赖项无关。