Ruby 2.2.1 在 Vagrant VM 中使用 Chef

Ruby 2.2.1 in Vagrant VM using Chef

我想使用 vagrant and chef.

为 rails 应用程序 设置新的 开发环境

目标

克隆存储库(见下文)。然后 运行:

vagrant up
vagrant ssh

最后 运行ning bundle install 在应用程序文件夹中应该可以使用已安装的 ruby 2.1.2.

我已经阅读了几个教程,这些教程描述了如何使用各种食谱和不同的策略(rbenv、rvm、ruby-install、ruby-构建)。但是,尽管有时可以正确配置机器,但我无法通过 ssh 进入机器并且 运行 bundle install 没有以下错误消息:

The program 'bundle' is currently not installed. To run 'bundle' please ask your
administrator to install the package 'bundler'

我现在将根据本教程展示我最近的尝试http://www.gotealeaf.com/blog/chef-basics-for-rails-developers/

我已将其上传到 github 此处: https://github.com/denniske/vagrant-chef-ruby

在创建 vagrant 机器并配置和 ssh 到机器后,我得到以下信息:

vagrant@vagrant-ubuntu-trusty-64:~$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

vagrant@vagrant-ubuntu-trusty-64:~$ which ruby
/usr/bin/ruby

vagrant@vagrant-ubuntu-trusty-64:~$ bundle
Could not locate Gemfile or .bundle/ directory

vagrant@vagrant-ubuntu-trusty-64:~$ cd /usr/local/ruby/2.1.2/bin

vagrant@vagrant-ubuntu-trusty-64:/usr/local/ruby/2.1.2/bin$ ls
erb  gem  irb  rake  rdoc  ri  ruby  testrb

问题 1:似乎默认 ruby 是 chef 用于供应 (1.9.3) 的 ruby,我不想将其用于我的 rails申请.

bundler 已成功安装,但连接到默认(错误)ruby 版本。

Ruby 2.2.1 已安装到 /usr/local/ruby/2.1.2

问题 2:通过在 default.rb 中使用这样的代码,我似乎能够 使我的 ruby 版本成为默认版本,但是捆绑器无法工作.

link "/usr/bin/ruby" do
  to "/usr/local/ruby/2.1.2/bin/ruby"
end

link "/usr/bin/gem" do
  to "/usr/local/ruby/2.1.2/bin/gem"
end

有没有人知道如何解决这个问题/可以创建一个拉取请求来让它工作?

似乎 gem_package 命令有问题。

我能够通过将 execute 资源替换为

来使其工作
execute "install gem" do
  command "gem install bundler --no-rdoc --no-ri"
end

并移除

gem_package 'bundler' do
  options '--no-ri --no-rdoc'
#  gem_binary "/usr/local/ruby/2.1.2/bin/gem"
end

很抱歉这不是我原来问题的真正直接答案,但我用另一种方式解决了这个问题并想与您分享。

我找到了网站 rove.io 并选择了语言 > Ruby > rbenv > 2.1.2,下载了软件包。然后我将捆绑器 gem 添加到下载的 Vagrantfile 中的 chef.json 配置中:

chef.json = {
      :rbenv => {
        :user_installs => [
          {
            :user   => "vagrant",
            :rubies => [
              "2.0.0-p647"
            ],
            :global => "2.0.0-p647",
            'gems'    => {
              '2.0.0-p647'    => [
                {
                  'name'    => 'bundler',
                  'version' => '1.10'
                }
              ]
            }
          }
        ]
      }
    }

然后我创建了 vagrant 机器,一切正常

注意:我已经在 ubuntu14 之前尝试过使用 rvm 和 chef。那没有用(由于一些奇怪的错误)。但是 rove.io Vagrantfile 使用的 ubuntu 版本有效。

我不会指定说明书实现本身,但您需要实现以下内容:

  1. 安装您最喜欢的 ruby 版本(包括 gem)。
  2. 更新默认 rubygem 符号链接,参见:/usr/bin/ruby/usr/bin/gem
  3. 安装您最喜欢的 bundler 版本。

您可以通过实施 minitests 实现您想要的(参见 minitest, and chef-minitest-handler