我用厨师和流浪汉当救世主。
当我试图按如下方式安装gems时,应用程序会崩溃:
metadata.rb
gem 'faraday'
gem 'json'default.rb
require 'faraday'
require 'json'
conn = Faraday.new(:url => 'http://127.0.0.1:8200')此错误引发:
==> 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依赖项)
depends 'hashicorp-vault', '~> 2.5.0'
depends 'build-essential', '~> 8.0.3'default.rb:
include_recipe 'hashicorp-vault::default'
chef_gem 'faraday'
chef_gem 'json'
require 'faraday'
require 'json'发布于 2017-10-25 18:22:15
安装gcc的主厨方式是使用build-essential食谱。
发布于 2017-10-25 10:39:04
在厨师配置之前添加一个shell提供程序?
例如,在您的Vagrantfile中:
Vagrant.configure("2") do |config|
config.vm.provision :shell, inline: 'yum install -y gcc'
config.vm.provision :chef, inline: '...'
end发布于 2017-10-25 17:49:12
菜谱完全能够运行任意命令,因此,如果您知道如何手动运行,您可以使用厨师在紧要关头。尽管如此,您应该保护任何任意命令,这样它们就不会每次运行菜谱时运行,只在需要时才运行。
execute 'sudo yum groupinstall \'Development Tools\'' unless <your logic for
detecting gcc goes here>厨师也有Ohai,它在运行之前就收集元数据,包括您正在运行的操作系统,这样您就可以利用它来制作您的食谱多平台。
include_recipe 'mycookbook::debian' if node['platform_family'] == 'debian'
include_recipe 'mycookbook::rhel' if node['platform_family'] == 'rhel'或者,如果您计划使用多种平台类型,则可以提供更多的灵活性。
possible_platforms = ['debian', 'rhel']
if possible_platforms.contains? node['platform_family']
include_recipe "mycookbook::node['platform_family']"
else
puts 'This platform isn't valid'
endhttps://stackoverflow.com/questions/46929117
复制相似问题