ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 配置 GEM 仓库 使用另外的不兼容的包系统是每个系统管理员的梦想。 如果你要管理 Ruby 或 Rails 应用程序,就需要处理 Rubygems。 与维护自己的 APT 仓库一样,维护你自己的 **gem 仓库** 会有很多优点。 你可以控制包的可用性和包的版本,也可以根据需要发布你自己的 Rubygems。 #### 操作步骤 1. 使用如下内容创建 /etc/puppet/modules/repo/manifests/gem-server.pp 文件: ``` class repo::gem-server { include apache file { "/etc/apache2/sites-available/gemrepo": source => "puppet:///modules/repo/gemrepo.conf", require => Package["apache2-mpm-worker"], notify => Service["apache2"], } file { "/etc/apache2/sites-enabled/gemrepo": ensure => symlink, target => "/etc/apache2/sites-available/gemrepo", require => File["/etc/apache2/sites-available/gemrepo"], notify => Service["apache2"], } file { "/var/gemrepo": ensure => directory, } } ``` 2. 使用如下内容创建 /etc/puppet/modules/repo/files/gemrepo.conf 文件: ``` <VirtualHost *:80> ServerAdmin john@bitfieldconsulting.com ServerName gems.bitfieldconsulting.com ErrorLog logs/gems.bitfieldconsulting.com-error_log CustomLog logs/gems.bitfieldconsulting.com-access_log common Alias / /var/gemrepo/ <Location /> Options Indexes </Location> </VirtualHost> ``` 3. 在配置清单的节点中添加如下代码: ``` node cookbook { include repo::gem-server } ``` 4. 运行 Puppet: ``` # puppet agent --test info: Retrieving plugin info: Caching catalog for cookbook.bitfieldconsulting.com info: Applying configuration version '1304949279' notice: /Stage[main]/Repo::Gem-server/File[/etc/apache2/ sites-available/gemrepo]/ensure: defined content as '{md5} ae1fd948098f14503de02441d02a825d' info: /Stage[main]/Repo::Gem-server/File[/etc/apache2/sitesavailable/ gemrepo]: Scheduling refresh of Service[apache2] notice: /Stage[main]/Repo::Gem-server/File[/etc/apache2/sitesenabled/ gemrepo]/ensure: created info: /Stage[main]/Repo::Gem-server/File[/etc/apache2/sitesenabled/ gemrepo]: Scheduling refresh of Service[apache2] notice: /Stage[main]/Apache/Service[apache2]: Triggered 'refresh' from 2 events notice: /Stage[main]/Repo::Gem-server/File[/var/gemrepo]/ensure: created notice: Finished catalog run in 6.52 seconds ``` #### 工作原理 其原理与 APT 仓库的例子是完全一样的。我们首先定义了一个 gem 仓库的存放目录, 然后定义了一个 Apache 的虚拟主机,使其能够响应 gems.bitfieldconsulting.com 的请求。 #### 更多用法 与 APT 仓库类似,仅有空仓库是无用的,下面将演示如何将 gem 包纳入仓库, 以及如何配置你的节点访问自己的 gem 仓库。 ##### 添加 gem 仓库 向你的仓库添加新的 gems 包很简单。将 gem 文件存入 /var/gemrepo/gems 目录, 然后在 /var/gemrepo 目录下运行如下命令即可: ``` # gem generate_index ``` ##### 使用 gem 仓库 像使用 APT 仓库一样,首先确保你的节点能够解析主机名 gems.bitfieldconsulting.com, 既可以使用 Puppet 部署 host 资源,也可以通过配置 DNS 实现。 然后在 Puppet 中使用如下代码指定一个 gem 软件包: ``` package { "json": provider => "gem", source => "http://gems.bitfieldconsulting.com ", } ```