我在Windows 7上使用Ruby 2.1和Rails 4.1。每当我运行bundle install
时,所有宝石都安装在系统路径c:/Ruby21/lib/ruby/gems/2.1.0/gems/
中。我还在项目中找到了vendor
目录。
来自PHP composer和node.js npm背景,所有依赖项应本地安装在项目vendor
文件夹或node_modules
文件夹中。所以,我的问题是:
vendor/bundle
中安装宝石吗? vendor/bundle
?vendor/bundle
?答案 0 :(得分:6)
当您运行bundle install
时,您使用的是名为Bundler的工具。
Bundler负责以与Composer类似的方式管理您的依赖项,但它不是在项目文件夹中安装所有内容,而是在系统范围内安装您的所有项目共享的gem。它通过使用项目文件夹中的Gemfile来跟踪哪个项目需要哪些库。所以,你应该让Bundler做它的事情,它做得很好,并且是Rails的标准包管理器。
如果您的主机支持Ruby和Rails应用程序(例如,像Heroku这样的PaaS),它肯定将支持Bundler并且将安装所有必需的gem。如果您正在谈论没有shell访问的廉价共享主机,那么无论如何都无法在那里部署Ruby应用程序,因为您需要安装实际的Ruby解释器和其他需要shell访问的东西。
没有。
你不应该。有this article描述如何做到这一点,但在我看来
无数次安装gems全局泄露到同一台机器上的其他项目中并导致令人讨厌的奇怪行为
只发生在本文的作者身上,我认为Bundler没有错。在任何情况下,您应该始终在bundle exec
之前添加gem命令(如在bundle exec rspec
中),并且您将永远不会遇到上述问题。 bundle exec
确保当您从gem执行命令时,调用Gemfile中定义的正确版本,如果您的系统中安装了相同gem的多个版本,则非常重要。