簡體   English   中英

使用vagrant和chef-solo,我如何指定要運行的紅寶石版本?

[英]Using vagrant and chef-solo, how can I specify which version of ruby to run?

我正在使用Chef-solo來配置新的無用虛擬機。 它是Ubuntu 12.10。 Chef第一次運行良好,但是此后任何時候都無法啟動。

問題在於,chef-solo需要使用ruby 1.9.3運行,但是我的一本烹飪書卻安裝了ruby 2.0.0。 它將新版本的ruby鏈接到/ usr / local / ruby​​,因此系統版本仍位於/ usr / bin / ruby​​。

/ usr / bin / chef-solo中的shebang行是#!/usr/bin/env ruby

在chef-solo運行之前,有什么方法可以在Vagrantfile中設置環境變量嗎? 還是有另一種方法來強制流浪漢使用/ usr / bin / ruby​​運行Chef-solo?

更新:我目前正在虛擬機上使用以下命令作為解決方法:

sudo /usr/bin/ruby /usr/bin/chef-solo --config /tmp/vagrant-chef-1/solo.rb --override-runlist "my_runlist"

當我在主機上鍵入vagrant provision時,我想強迫Vagrant運行類似的操作。

/usr/bin/env使用$ PATH查找可執行文件。 您應該確保/usr/bin/ruby位於路徑的最前面。 確保這一點的一種方法是:

export PATH=/usr/bin:$PATH

..然后嘗試您的廚師獨奏。

這里的更多信息來自: http : //zh.wikipedia.org/wiki/Shebang_(Unix)#Portability

通常,可以通過引入間接級別來使用程序/ usr / bin / env來規避此限制。 #! 后面是/ usr / bin / env,然后是沒有完整路徑的所需命令,如本例所示:

!/ usr / bin / env sh

之所以能成功,是因為/ usr / bin / env路徑通常用於env實用程序,並且如果正確配置了用戶的路徑,它將調用用戶$ PATH中的第一個sh,通常是/ bin / sh。

使用無業游民的omnibus插件,您可以安裝擁有自己的嵌入式Ruby的Chef Omnibus,以確保Chef運行始終使用相同的Ruby版本。

我發現的唯一問題是,如果您的食譜依賴於系統版本的ruby,則某些設置將無法正常工作(例如,如果您在shell_out!中使用/usr/local/bin安裝的ruby,則不會使用) shell_out!菜譜,但在/usr/bin中將安裝)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM