AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 788158
Accepted
Mikhail T.
Mikhail T.
Asked: 2016-07-06 20:28:51 +0800 CST2016-07-06 20:28:51 +0800 CST 2016-07-06 20:28:51 +0800 CST

如何使用 Puppet 为非默认 Ruby 安装 gem?

  • 772

RedHat/CentOS-6 包含的 ruby​​ 版本为 1.8.7,对于许多应用程序来说太旧了。虽然简单地使用定制的 RPM 更新它是可能的,但我的同事们回避这个想法并希望使用SCL-repo提供的rh-ruby22包。

这安装了 ruby​​-2.2,这很棒,但在/opt/rh/rh-ruby22. 我现在需要安装几个 gem,并且显然想使用 Puppet:

package {'example':
  ensure   => '0.25',
  provider => 'gem'
}

不幸的是,gem-provider 调用/usr/bin/gem而不是/opt/rh/rh-ruby22/root/usr/bin/gem需要调用。还有其他方法吗?谢谢!

redhat puppet centos6 gem
  • 2 2 个回答
  • 589 Views

2 个回答

  • Voted
  1. Best Answer
    Zach
    2022-01-16T20:47:07+08:002022-01-16T20:47:07+08:00

    包资源,特别是gem 提供者,现在支持使用command属性。现在支持您的特定示例,如下所示:

    package {'example':
      ensure   => '0.25',
      provider => 'gem',
      command  => '/opt/rh/rh-ruby22/root/usr/bin/gem'
    }
    
    • 1
  2. Mikhail T.
    2016-07-08T19:10:53+08:002016-07-08T19:10:53+08:00

    好的,“简单”的方法是实现自己的包提供程序。幸运的是,可以从现有的 gem-provider 继承所有内容,只覆盖 gem-command 本身。

    因为 SCL 的 rh-ruby22 太迟钝了,你甚至不能直接调用它的rubyor gem—— 没有LD_LIBRARY_PATH先设置—— 我们在/usr/bin. 例如/usr/bin/gem2,设置库路径(和PATH),然后是带有自己参数exec的实数( )。/opt/rh/rh-ruby22/root/usr/bin/gem"$@"

    我的新提供者使用gem2包装脚本来做它的事情。

    我使用以下内容创建了文件(使用 Puppet-3.8.7 测试)gem2.rb:modules/SOMEMODULE/lib/puppet/provider/package/

    require 'puppet/provider/package'
    
    Puppet::Type.type(:package).provide File.basename(__FILE__, ".rb"),
        :parent => :gem, :source => :gem do
            desc "Ruby Gem support using #{@name}-executable"
    
            commands :gemcmd => @name.to_s
    end
    

    尽管我希望,我的实现将允许将 gem-command 指定为 puppet-manifest 中的参数,如果不完全重写现有的 gem-provider,就不可能做到这一点。我的方法更容易,也同样有效。

    作为奖励,将文件复制到其他名称(例如gem19.rb)将自动创建新的提供程序 - 请确保gem19在$PATH.

    您将保存此文件的模块可以是需要新提供程序的机器使用的任何模块。

    • 0

相关问题

  • 如何设置 Redhat 对 ActiveDirectory 的用户进行身份验证

  • 如何从 RHEL 5 迁移到 CentOS 5?

  • 我应该将 Rails 应用程序部署到哪个目录?

  • 如何移动 MySQL 的数据目录?

  • RHEL 5.3 上可用的 yum 存储库

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve