0

我正在编写一个 LWRP 来使用 API 密钥为 redis 数据库播种以允许身份验证。我的麻烦是将redis库用于ruby。我四处搜索并在网上找到了一些示例,但对我没有任何帮助。

我在 AWS OpsWorks 上运行它,所以它使用的是 chef-solo

我尝试在我的运行列表中包含一个安装 redis gem 的配方(https://github.com/brianbianco/redisio/blob/master/recipes/redis_gem.rb

我还尝试在食谱中安装它们 gem。

    r = gem_package "redis" do
      action :install
    end

    r.run_action(:install)

或者

    r = chef_gem "redis" do
      action :install
    end

    r.run_action(:install)

这是我在厨师跑步时遇到的错误

[2013-10-03T16:11:41+00:00] DEBUG: filtered backtrace of compile error: 
[2013-10-03T16:11:41+00:00] DEBUG: filtered backtrace of compile error: 
[2013-10-03T16:11:41+00:00] DEBUG: backtrace entry for compile error: '/opt/aws/opsworks/releases/20130926123105_208/site-cookbooks/ilnkmx/providers/add_app.rb:1:in `require''
[2013-10-03T16:11:41+00:00] DEBUG: Line number of compile error: '1'
[2013-10-03T16:11:42+00:00] ERROR: Caught exception while compiling OpsWorks custom run list: LoadError - no such file to load -- redis - /opt/aws/opsworks/releases/20130926123105_208/site-cookbooks/ilnkmx/providers/add_app.rb:1:in `require'

我是红宝石的新手,所以任何和所有的帮助都非常感谢,谢谢。

4

1 回答 1

0

所以看来我错过了一小块,而且我在错误的地方放了一些东西。

首先,在我的配方中安装 redis gem 后,我需要刷新 gem,如下所示。

r = chef_gem "redis" do
  action :nothing
end

r.run_action(:install)
Gem.clear_paths

我还需要我的 Provider 中的库,这是不正确的。我需要在我的食谱中要求它,Gem.clear_paths然后在我的提供者中打开连接并执行添加、删除或更新看起来像这样的记录。

action :create do
    if @current_resource.exists
        Chef::Log.info "#{ @new_resource } already exist - nothing to do."
    else
        converge_by("Create #{ @new_resource }") do
            create_app_key
        end
    end
end

def create_app_key
  redis = ::Redis.new
  redis.set "#{@new_resource.app_name}", "#{@new_resource.api_key}"
end
于 2013-10-08T21:18:47.100 回答