【问题标题】:Ruby on Rails Bundler: install gems in different paths specified by Gemfile?Ruby on Rails Bundler:在 Gemfile 指定的不同路径中安装 gem?
【发布时间】:2015-01-02 11:45:41
【问题描述】:

有没有办法在 Gemfile 中指定每个 gem 的安装位置?如果我输入我的 Rails 应用程序目录,预期的结果将是稍后:

bundle install

那么根据Gemfile,一些gem会默认安装到system-default gempath或者之前的--path选项指定的路径中,而另外一些gem会被下载安装到使用Gemfile指定的路径中。

我如何通过 Gemfile 做到这一点? 或者也许使用.bundle/config?有什么想法吗?

使用 bundle 的 --path 选项不是一个解决方案,因为它会强制安装到同一目录中的所有 gem。例如,如果我依赖于 4 个 gem:A、B、C 和 D。我想运行 bundle 命令然后自动将 A 和 C 安装到默认目录中,而 B 和 D 安装到自定义目录中.

在 Gemfile 中使用以下行也不是解决方案:

gem 'rspec', :path => 'some/path'

因为这需要用户手动下载该 Gem 并预先将其放入指定路径,但我希望 Gem 自动下载并安装到该路径中。是否可以?怎么样?

谢谢!

【问题讨论】:

  • bundle install --path vendor/bundle 但您需要从 Gemfile 中删除 path 选项
  • 不会强制所有 gem 安装到同一个目录中

标签: ruby-on-rails ruby gem bundle gemfile


【解决方案1】:

据我所知,捆绑器 gem 确实遵循您的建议,并将所有内容安装到 --path=/your/path 指定的路径中。所以正常情况下只要你使用应该没有问题

$ bundle install --path=/your/path

无论如何,如果您想阻止捆绑程序全局安装某些东西,即使您没有设置 --path 标志,您可以设置一个全局 gem 前缀。 使用--user 标志,每个gem 都将安装到您的主目录中。只需将gem: --user-install 添加到您的 .gemrc

$ echo "gem: --user-install" > ~/.gemrc

请注意,如果您使用手动安装 gem,也会使用此规则

$ gem install my_awesome_gem

【讨论】:

  • 谢谢,蒂姆。但是,这实际上并不能解决问题。如前所述, bundle install --path=/your/path 将强制所有 gem 安装到同一目录中,而我想运行 bundle 命令然后自动将一些 gem 安装到默认系统目录中,并将一些 gem 安装到自定义目录中。
  • 我认为使用 Bundler 很难做到这一点。据我所知,Bundler 不提供这样的功能。即使您手动安装系统 gems,如果您设置 --path,Bundler 通常也会禁用共享 gems 的功能,因为 Bundler 的整个想法是创建一个封闭的环境来开发您的应用程序。无论如何,您可以尝试通过挖掘应用程序中的 .bundle/config 文件并启用 gem 共享来禁用该行为。
【解决方案2】:

您可以在 config.ru 文件中指定您的 gem 安装目录

参考这个答案:Specify gem installation directory

【讨论】:

    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多