0

我正在使用 Vagrant 框:

https://dl.dropbox.com/u/14292474/vagrantboxes/precise64-ruby-1.9.3-p194.box

它在 rbenv 下安装了 ruby​​1.9.3。我正在尝试测试一个 rails 应用程序,并且在我拥有的 chef-solo 配置器中(除其他外),这个块:

execute 'install' do
  action :run
  command "bundle install --path #{node.app_name.lib_path}/vendor/bundle --binstubs"
  cwd node.app_name.path 
end

rbenv 安装在 vagrant 用户下,并指示全局使用 1.9.3。出于某种原因,当在vagrant up期间运行 bundler 时,它仍然使用 1.8.7,它只能在 /opt/vagrant_ruby 中找到。

我如何告诉 vagrant 我想使用 rbenv ruby​​ 来执行所有任务。我需要在执行块的env选项中传递一些东西吗?

4

1 回答 1

0

首先开始在你的服务器中获取 bundle 的路径:

$ which bundle
/opt/rbenv/shims/bundle

然后,知道在厨师中包含 rbenv 食谱时,常数RBENV_ROOT等于 /opt/rbenv,修改您的命令如下:

command "#{RBENV_ROOT}/shims/bundle install --path #{node.app_name.lib_path}/vendor/bundle --binstubs"

因此,您确保在安装时使用正确版本的 bundle。

您可以做的第二件事是在您与 chef- 一起使用的用户的 ~/.bashrc 顶部添加 rbenv 的路径(可以位于 /etc/profile.d/rbenv 但取决于您的安装)独奏

例如,如果您使用的是“部署程序”,请编辑 /home/deployer/.bashrc 以在文件顶部添加:

#Rbenv path for remote shells
source /etc/profile.d/rbenv.sh    # <--- adapt this to your installation

# If not running interactively, don't do anything
[ -z "$PS1" ] && return    # <--- remote shell (ssh connection) will stop at this line
于 2013-03-31T22:22:09.480 回答