首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装gem时主厨崩溃

安装gem时主厨崩溃
EN

Stack Overflow用户
提问于 2017-10-25 09:44:38
回答 3查看 629关注 0票数 0

我用厨师和流浪汉当救世主。

当我试图按如下方式安装gems时,应用程序会崩溃:

metadata.rb

代码语言:javascript
复制
gem 'faraday'
gem 'json'

default.rb

代码语言:javascript
复制
require 'faraday'
require 'json'

conn = Faraday.new(:url => 'http://127.0.0.1:8200')

此错误引发:

代码语言:javascript
复制
==> default: Running handlers:
==> default: [2017-10-25T09:42:43+00:00] ERROR: Running exception handlers
==> default: Running handlers complete
==> default: [2017-10-25T09:42:43+00:00] ERROR: Exception handlers complete
==> default: Chef Client failed. 0 resources updated in 19 seconds
==> default: [2017-10-25T09:42:43+00:00] INFO: Sending resource update report (run-id: 7f4593f5-1c86-409c-95fe-988f09501740)
==> default: [2017-10-25T09:42:43+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> default: [2017-10-25T09:42:43+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
==> default: [2017-10-25T09:42:43+00:00] ERROR: Expected process to exit with [0], but received '5'
==> default: ---- Begin output of bundle install ----
==> default: STDOUT: Don't run Bundler as root. Bundler can ask for sudo if it is needed, and
==> default: installing your bundle as root will break this application for all non-root
==> default: users on this machine.
==> default: Fetching gem metadata from https://rubygems.org/
==> default: Fetching version metadata from https://rubygems.org/
==> default: Resolving dependencies...
==> default: Installing multipart-post 2.0.0
==> default: Installing json 2.1.0 with native extensions
==> default:
==> default: Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
==> default:
==> default:     current directory: /opt/chef/embedded/lib/ruby/gems/2.3.0/gems/json-2.1.0/ext/json/ext/generator
==> default: /opt/chef/embedded/bin/ruby -r ./siteconf20171025-3434-1qh8whd.rb extconf.rb
==> default: creating Makefile
==> default:
==> default: current directory: /opt/chef/embedded/lib/ruby/gems/2.3.0/gems/json-2.1.0/ext/json/ext/generator
==> default: make "DESTDIR=" clean
==> default:
==> default: current directory: /opt/chef/embedded/lib/ruby/gems/2.3.0/gems/json-2.1.0/ext/json/ext/generator
==> default: make "DESTDIR="
==> default: compiling generator.c
==> default: make: gcc: Command not found
==> default: make: *** [generator.o] Error 127
==> default:
==> default: make failed, exit code 2
==> default:
==> default: Gem files will remain installed in /opt/chef/embedded/lib/ruby/gems/2.3.0/gems/json-2.1.0 for inspection.
==> default: Results logged to /opt/chef/embedded/lib/ruby/gems/2.3.0/extensions/x86_64-linux/2.3.0/json-2.1.0/gem_make.out
==> default: Using bundler 1.12.5
==> default: Installing faraday 0.13.1
==> default: An error occurred while installing json (2.1.0), and Bundler cannot continue.
==> default: Make sure that `gem install json -v '2.1.0'` succeeds before bundling.
==> default: STDERR:
==> default: ---- End output of bundle install ----
==> default: Ran bundle install returned 5
==> default: [2017-10-25T09:42:43+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

gcc似乎失踪了,但我不能安装它,因为它首先尝试安装宝石,然后执行配方,所以在我做任何事情之前它就崩溃了。

-编辑--

我已经添加了这些行,并且正在工作:

metadata.rb:(从这里删除gem依赖项)

代码语言:javascript
复制
depends 'hashicorp-vault', '~> 2.5.0'
depends 'build-essential', '~> 8.0.3'

default.rb:

代码语言:javascript
复制
include_recipe 'hashicorp-vault::default'
chef_gem 'faraday'
chef_gem 'json'
require 'faraday'
require 'json'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-25 18:22:15

安装gcc的主厨方式是使用build-essential食谱。

票数 2
EN

Stack Overflow用户

发布于 2017-10-25 10:39:04

在厨师配置之前添加一个shell提供程序?

例如,在您的Vagrantfile中:

代码语言:javascript
复制
Vagrant.configure("2") do |config|
    config.vm.provision :shell, inline: 'yum install -y gcc'
    config.vm.provision :chef, inline: '...'
end
票数 0
EN

Stack Overflow用户

发布于 2017-10-25 17:49:12

菜谱完全能够运行任意命令,因此,如果您知道如何手动运行,您可以使用厨师在紧要关头。尽管如此,您应该保护任何任意命令,这样它们就不会每次运行菜谱时运行,只在需要时才运行。

代码语言:javascript
复制
execute 'sudo yum groupinstall \'Development Tools\'' unless <your logic for 
detecting gcc goes here>

厨师也有Ohai,它在运行之前就收集元数据,包括您正在运行的操作系统,这样您就可以利用它来制作您的食谱多平台。

recipe.html

代码语言:javascript
复制
include_recipe 'mycookbook::debian' if node['platform_family'] == 'debian'
include_recipe 'mycookbook::rhel' if node['platform_family'] == 'rhel'

或者,如果您计划使用多种平台类型,则可以提供更多的灵活性。

代码语言:javascript
复制
possible_platforms = ['debian', 'rhel']
if possible_platforms.contains? node['platform_family']
   include_recipe "mycookbook::node['platform_family']"
else
    puts 'This platform isn't valid'
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46929117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档