在 chef lwrp 中安装、要求和使用 ruby 库
Posted
技术标签:
【中文标题】在 chef lwrp 中安装、要求和使用 ruby 库【英文标题】:Installing, requiring, and using a ruby library in chef lwrp 【发布时间】:2013-10-10 10:39:02 【问题描述】:我正在编写一个 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'
我是 ruby 的新手,所以任何和所有的帮助都非常感谢,谢谢。
【问题讨论】:
【参考方案1】:所以我似乎遗漏了一小部分,而且我在错误的地方放了一些东西。
首先我需要在我的配方中安装 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
【讨论】:
以上是关于在 chef lwrp 中安装、要求和使用 ruby 库的主要内容,如果未能解决你的问题,请参考以下文章