1. 介绍

这篇文章是写给要使用rails作为开发环境的新手的。我是在mac平台上使用,windows平台也应该同样适用。

我们的目的是实现用virtualbox运行ubuntu系统,在里面创建rails的开发环境,而我们写代码,却不在ubuntu里,还是在你的mac上或windows中。

而vagrant就是对virtualbox进行包装,可以提供一些命令行工具对虚拟机virtualbox进行操作。

2. 安装vagrant和virtualbox

首先要安装的是vagrant和virtualbox。

分别进入它们的官网进行安装就可以了,它们都有二进制包的,找到适合你平台的就可以。

3. 使用vagrant

要学会使用vagrant,可以看其官方的文档。

一般来说我们大约是这样使用的。

先找到一个你需要的linux镜像,现把它添加到系统中,然后初始化这个镜像并启动它,因为它是一个linux系统,最后进入里面进行操作。

添加镜像的操作类似这样:

$ vagrant box add hashicorp/precise64
$ vagrant init hashicorp/precise64

或者类似这样

$ vagrant box add --name ubuntu-14.04 https://github.com/kraksoft/vagrant-box-ubuntu/releases/download/14.04/ubuntu-14.04-amd64.box
$ vagrant init ubuntu-14.04

但是我们不会这么做

我们会使用一个别人弄好的box来用。

它的地址是:https://github.com/rails/rails-dev-box。

把它clone下来,然后它会主动装好各种软件,比如redis,postgresql等,省事。

$ git clone https://github.com/rails/rails-dev-box.git
$ cd rails-dev-box

接着你执行下面的命令,它就会帮你下载镜像,并安装一些必要的软件。

$ vagrant up

等一切处理完毕。

再使用下面的命令进行虚拟机。

$ vagrant ssh

你已经进入到一个linux的环境中,你在虚拟机中可以执行很多操作,比如安装一些软件,这些软件都会保存下来的。

vagrant up是把虚拟机启动的意思,如果要把虚拟机关掉,可以使用vagrant halt

下面列举一些vagrant的常用命令:

$ vagrant init  # 初始化
$ vagrant up  # 启动虚拟机
$ vagrant halt  # 关闭虚拟机
$ vagrant reload  # 重启虚拟机
$ vagrant ssh  # SSH 至虚拟机
$ vagrant status  # 查看虚拟机运行状态
$ vagrant destroy  # 销毁当前虚拟机

4. 安装ruby环境

现在我们ssh进虚拟机,进行安装ruby。

我们使用rvm来管理ruby。

进入rvm的官方首页,在首页上找到两条命令行,那个就是安装方法,在终端上分别贴一下。

例如:

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
$ \curl -sSL https://get.rvm.io | bash -s stable

这两条命令要在官方网页上找,因为那才是最新的

装好之后,就可以按ctrl + d退出后,再重新vagrant ssh进去。

下面我们准备用rvm来安装ruby。

不过在安装之前我们把rvm的ruby源改一下,改用国内的,这样安装起来快点。

它的地址是:https://ruby.taobao.org/。

我们使用下面的命令:

sed -i -E 's!https?://cache.ruby-lang.org/pub/ruby!https://ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db

改了源之后,下面来安装ruby。

你可以安装任意一个版本的ruby。

比如我安装的是2.3.0的。

$ rvm install 2.3.0

等装好之后,可以安装一下rails。

同样在安装之前,可以换一下gem的源。

它的地址是:https://gems.ruby-china.org/。

$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
$ gem install bunlder
$ bundle config mirror.https://rubygems.org https://gems.ruby-china.org

再安装。

$ gem install rails

5. 设置开发环境

现在我们准备用rails生成一个项目,并把它跑起来。

首先进入/vagrant目录,为什么要进入这个目录呢?

因为这个目录默认情况下是会映射到外面的主机(虚拟机外面)的一个目录,就是我们最早clone的那个rails-dev-box目录。

它们的内容是一模一样的,不信你可以试一下,在/vagrant新建一个文件,看外面的rails-dev-box会不会也有那个文件。

现在用rails生成一个新项目。

$ cd /vagrant
$ rails new hello

进入hello目录,然后运行这个项目。

$ cd hello
$ rails s --bind 0.0.0.0

--bind 0.0.0.0表示绑定的ip地址是外面主机可以访问到的。

这个时候你会发现,我虽然把项目跑起来了,可是在外面主机的浏览器如何访问呢

可能你会使用ifconfig命令来查看ip地址,但是你会发现那些ip地址都不能访问的。

6. 设置网络

现在我们来解决上面不能访问的问题。

我们只需要改一下配置文件,再重启一下虚拟机就可以。

打开rails-dev-box中的Vagrantfile文件,添加下面一行配置:

config.vm.network :private_network, ip: "192.168.33.10"

再使用下面的命令重启一下虚拟机。

$ vagrant reload

重启虚拟机,这样我们就能用 192.168.33.10 访问这台机器了,你可以把 IP 改成其他地址,只要不产生冲突就行。

7. 打包分发

现在我们把这个开发环境弄好了,我们可以把这个打包分发给其他同事,这样同事就省事多了。

退出并关闭虚拟机后,执行下面的命令:

$ vagrant package

打包完成后会在当前目录生成一个 package.box 的文件,将这个文件传给其他用户,其他用户只要添加这个 box 并用其初始化自己的开发目录就能得到一个一模一样的开发环境了。

添加方法:

假设我们拿到的 box 存放路径是 ~/box/package.box,在终端里输入:

$ vagrant box add hahaha ~/box/package.box  # 添加 package.box 镜像并命名为 hahaha
$ cd ~/dev  # 切换到项目目录
$ vagrant init hahaha  # 用 hahaha 镜像初始化。

完结。

参考链接: