【问题标题】:Fully configured ruby development environment with vagrant带有 vagrant 的完全配置的 ruby​​ 开发环境
【发布时间】:2014-06-16 22:02:42
【问题描述】:

我想要一个使用 Vagrant 配置和配置的完全配置的 ruby​​ unix 开发环境。理想情况下,它将引用一个简单的基础框(例如,precision32)并通过配置构建环境,以便其他团队成员可以轻松地重复它,可以发布到 github,并且可以升级为新版本只需更改配置即可使用不同的技术。尽管 [Rails Dev Box][1] 有一些有用的想法,但我还没有找到任何关于此搜索的完整示例。大多数开发环境示例(如 Rails Dev Box)并没有设置来宾开发环境,因为他们假设开发将使用共享文件策略在主机上完成 - 或者如果他们手动进行配置然后保存盒子而不是而不是配置它。

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

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

在主机上:

  • 安装 virtualbox、vagrant、vagrant proxyconf

在客户机上,通过 Vagrantfile/provisioning:

  • 使用基本的 unix 框(例如,precision32)

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

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

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

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

【问题讨论】:

  • 有一项服务,[Rove][rove.io],看起来很有希望。您选择功能,我上面的大部分内容,它将为您生成一个 Vagrantfile 和一个 Cheffile,您将它们复制到您的目标目录。要使用 Cheffile,您必须安装 librarian-chef gem,然后在该目录中运行 librarian-chef 以将您需要的食谱复制到 cookbook 子目录中。然后,从概念上讲,您可以运行vagrant up 并立即获得配置并运行的虚拟机。到目前为止,不幸的是我在 Windows 上没有成功(错误配置)。
  • 另一个与 Rove 类似的服务(基于 Puppet 而不是 Chef)是 PuPHPet,“为 Web 开发设置虚拟机的简单 GUI。”它看起来不错,但似乎还不支持 Ruby(目前只有 PHP 和 HHVM)。
  • 另一个看起来很有前途的开发环境创建者是 [图][fig.sh/rails.html],它利用 Docker 创建开发环境。 Fig 被 Docker 收购了,所以在不久的将来会有好事发生。

标签: vagrant


【解决方案1】:

我更喜欢使用 puppet 作为 Vagrantfile 中的配置步骤。

有了这样的东西,你总是可以通过在 shell 配置器中执行所有步骤来快速而肮脏地把东西拼凑在一起……但我更喜欢 puppet 和模块方法,因为我发现它更容易维护、扩展并与团队分享。

正如您提到的,我已经尝试了几种使用 Ruby 和 rvm 进行配置的不同方法;

  1. maestrodev 提供的 rvm puppet 模块允许您配置许多 rvms 核心功能:ruby 版本、gemset、gems 和 rvm 包装器。通常,为了管理项目中包含哪些 puppet 模块,我使用 librarian-puppet gem,它允许您使用 Puppetfile 来指定所需的模块和版本,很像 bundler。这处理依赖关系,例如 stdlib 和 concat 模块。这种情况需要在配置之前配置外部 Internet 访问,以便能够下载 ruby​​ 和 ruby​​gems。

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

另外,对于您的其他配置步骤,您可以自己构建 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 工具,它们对于将数据排除在模块之外非常有用,并且在您的初始设置正常工作后值得一看作为重构的一种方法。

【讨论】:

  • 这看起来正是我正在寻找的方法,我会尽快尝试......
  • 做这种事情的人偶比厨师好吗?还是折腾了?
  • 对我来说,我比较熟悉puppet;我可以更快地使用它,到目前为止它已经非常满足了我的需求。我并没有真正尝试过厨师。在配置管理领域还有 Ansible 和 Salt,它们都与 Vagrant 配置集成。我最近读了这个答案stackoverflow.com/questions/19879747/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
相关资源
最近更新 更多