【问题标题】:Ruby/rails/bundler: bundling only *some* of the required gemsRuby/rails/bundler:只捆绑*一些*必需的 gem
【发布时间】:2013-02-18 12:07:27
【问题描述】:

我需要部署一个打包为 RHEL RPM 的 Rails 应用。我想捆绑 一些 它需要的 gem,但让生产机器的系统 gem 满足其余部分。

作为最终结果(例如),我希望应用程序在应用程序的 vendor 树中找到一些宝石(例如 versionomy),但要找到 Rails activerecordactionpack 和主机系统范围的 gem 库中的其他 gem。

到目前为止,我只找到了捆绑全有或全无的方法。谁能指出我解释如何使用 Bundler 的文档,但将 $: 作为搜索路径,首先列出应用程序的捆绑 gem,然后是系统的 gem?或者是否有可能?

谢谢!

【问题讨论】:

    标签: ruby-on-rails bundler rpm rhel


    【解决方案1】:

    在供应商目录中指定 gem 的路径

    在 Gemfile 中:

    gem 'versionomy', :path => 'vendor/extensions'
    

    更新

    是的,它将在部署组中工作。 您可以指定在开发、生产和测试中使用哪些 gems

    group :development, :test do
      gem 'sqlite3'
      gem 'thin'
    end
    
    group :production do
      gem 'pg'
    end
    

    以我为例,宝石的系统路径

    /usr/local/lib/ruby/gems/1.9.1/gems/
    

    通过whereis gem检查您的安装路径

    如果你使用的是 rbenv

    /home/username/.rbenv/versions/1.9.3-p362/lib/ruby/gems/1.9.1/gems/
    

    【讨论】:

    • 这对bundle --deployment 有效吗?系统 gem 库的规范 :path 是什么? (例如,对于 Ruby 1.8.7 1.9,这似乎有所不同。)
    • 这看起来是最接近工作的东西,尽管它被证明是一个正确的错误。谢谢!
    【解决方案2】:

    您可能必须在构建机器上安装您不想提供的要求作为它们自己的 RPM。然后 RPM 构建过程将需要它们但不提供它们。

    【讨论】:

    • 这不是问题;在示例中,Rails gem 已经打包为 RPM 并安装在目标机器上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2014-03-02
    • 2022-08-14
    相关资源
    最近更新 更多