完全配置的红宝石开发环境

时间:2014-04-30 14:14:18

标签: vagrant

我希望使用Vagrant配置和配置来完全配置ruby unix开发环境。理想情况下,它会引用一个简单的基本框(例如,精确32),并通过这样的方式构建环境,以便其他团队成员可以轻松地重复,可以发布到github,并且可以升级为新版本的只需更改配置即可使用不同的技术。虽然[Rails Dev Box] [1]有一些有用的想法,但我还没有找到任何完整的搜索网页示例。大多数开发环境示例(如Rails Dev Box)都没有设置guest dev环境,因为他们假设dev将使用共享文件策略在主机上完成 - 或者如果他们手动完成配置然后保存框而不是而不是供应它。

这也需要在代理后面以及没有代理的情况下工作。

以下是我认为需要采取的步骤:

在主持人身上:

  • 安装virtualbox,vagrant,vagrant proxyconf

在访客上,通过Vagrantfile / provisioning:

  • 使用基础unix框(例如,精确32)

  • 可选地设置代理变量(如果安装了proxyconf插件并且设置了http_proxy env var)

  • 提供其他所有内容(木偶,厨师或shell脚本)
    • 安装各种unix工具(apt-get install git,etc.expo ...)
    • 设置bash环境
    • 设置vim环境(病原体插件,ruby插件等)
    • 安装rvm
    • 安装ruby 1.9,2.0,JRuby,Rubinius
    • 安装并配置tmux

理想情况下,我可以将其推送到github,它可以被克隆,然后cd到新的directoy,vagrant up有一个完全配置的开发环境......

有没有人有这样做的例子?

1 个答案:

答案 0 :(得分:1)

我喜欢做这样的任务就是使用puppet作为Vagrantfile中的配置步骤。

有了这样的东西,你可以通过在shell配置器中执行所有步骤来快速和脏地将所有东西放在一起......但我更喜欢木偶和模块方法,因为我发现它更容易维护,扩展并与团队分享。

我已经尝试过几种不同的方法,如你所提到的那样使用Ruby和rvm进行配置;

  1. maestrodev创建的rvm puppet模块允许您配置许多rvms核心功能:ruby版本,gemsets,gems和rvm包装器。通常,为了管理项目中包含哪些木偶模块,我使用了librarian-puppet gem,它允许您使用Puppetfile来指定模块和所需的版本,就像bundler一样。它处理依赖项,例如stdlib和concat模块。此方案需要在配置之前配置外部Internet访问,以便能够下载ruby和rubygems。

  2. rvm的离线安装 - 我使用共享文件夹使流浪者机器可以访问相关文件(rvm本身,ruby和rubygems),并将offline rvm instructions变成一个(不是很好)的木偶模块并使用了那个。这里要注意的一个特别问题是安装的ruby源的命名;扩展必须是.tar.bz2,它在列表中描述。

  3. 此外,对于您的其他配置步骤,您可以自己构建puppet模块以满足您的额外要求:vim / tmux等,并在git中单独保留此版本。仅使用'puppet trifecta'

    的模块就可以获得相当远的距离
    class vim {
      package { 'vim':
        ensure => installed,
      }
      file { '.vimrc':
        ensure => file,
        ...
      }
    } 
    

    另外,查看the puppet forge可能已编写的模块,以执行您想要的操作。

    因此,您可以查看以下内容的示例:

    / Puppetfile
    / README.md
    / Vagrantfile
    / puppet 
      /manifests
        site.pp
    

    流浪者供应者将是

    Vagrant.configure("2") do |config|
      config.vm.provision "puppet" do |puppet|
        puppet.manifests_path = "puppet/manifests"
        puppet.module_path    = "puppet/modules"
        puppet.manifest_file  = "site.pp"
      end
    end
    

    我之前使用过rake任务来使用librarian-puppet从git / puppet forge中获取puppet依赖项,以及在流浪之前你可能需要做的任何其他步骤。通过这种方式,您可以检查代码作为配置。

    最后,对于puppet,您可以使用facter和hiera工具,这些工具对于保存模块中的数据非常有用,值得在初始设置工作后将其作为重构方法。< / p>