【问题标题】:require ruby library in serverspec在 serverspec 中需要 ruby​​ 库
【发布时间】:2014-03-03 04:48:49
【问题描述】:

我是 ruby​​ 的新手,并试图在厨师中弄脏我的手。我在 postgresql 社区食谱上写了一本包装食谱,并希望使用测试厨房对其进行测试。以下是我写的spec.rb文件:

require 'serverspec'
require 'pg'

include Serverspec::Helper::Exec
include Serverspec::Helper::DetectOS


RSpec.configure do |c|
  c.before :all do
    c.path = '/sbin:/usr/sbin'
    c.os = backend(Serverspec::Commands::Base).check_os
  end
end

describe "Postgresql server" do
    it "should connect to database" do
        conn = PG::Connection.open(:dbname => "db",:user => "user1",:password => "password")
        conn.status == "CONNECTION_OK"
    end
end

通过这个测试,我希望检查用户和数据库是否已正确创建。 但是,此测试无法解决“pg”的依赖性。我在 serverspec 中哪里提到了这种依赖关系? 我使用kitchen verify [node name] 运行测试。

【问题讨论】:

    标签: ruby chef-infra test-kitchen


    【解决方案1】:

    在您的 spec_helper.rb 文件中(或在规范文件的顶部,如果更有意义)中要求它之前,创建安装 gem 所需的 Ruby 代码:

    begin
      Gem::Specification.find_by_name('pg')
    rescue Gem::LoadError
      require 'rubygems/dependency_installer'
      Gem::DependencyInstaller.new(Gem::DependencyInstaller::DEFAULT_OPTIONS).install('pg')
    end
    require 'pg'
    

    【讨论】:

    • 我正在使用测试厨房运行这个规范文件。测试厨房负责在节点中安装所需的 gem。我不知道如何将这个bundle install 命令包含在测试厨房的生命周期中。
    • 我试过你的方法。测试厨房确实开始安装 pg gem。但是,它会出现“找不到 PostgreSQL 客户端库 (libpq)”的错误。关于这个错误有很多讨论,我发现使用 "env ARCHFLAGS="-arch x86_64" gem install pg" 解决了这个问题。我已经手动运行了这个命令,它是成功的。但是,如何在 DependencyInstaller 中传递此参数?
    猜你喜欢
    • 2012-03-16
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 2011-11-10
    • 2011-02-17
    • 2015-09-12
    相关资源
    最近更新 更多