此文写于2017.8.21

在写本文前,笔者已经尝试了多种其他的替代方法,例如wmware虚拟机安装kylin。然而发现总是还有各种问题。经大佬指点安装了virtualbox + vagrant。于是发现配置起来如此简单。接下来笔者将详细阐述。

注:笔者自己的服务器上的配置是centos7.2 + ruby2.3.4 + mariadb + redis,自己的笔记本为win10另外,很多网上的类似文章都写于很长时间以前,很多内容现在已经不适用,甚至很多关键的环节还不讲清楚,导致笔者配置初期踩了很多的坑。所以写下此文,总结经验

配置流程

1、box镜像的选择

本文中,笔者由于网站服务器系统为centos7.2,所以理所应当的选择了centos的镜像。(镜像官网,支持搜索配置:https://app.vagrantup.com/boxes/search。 关于vagrant,此文中不再赘述,网上关于vagrant+virtualbox的资料很多,基本配置也非常简单省事)。

起初,笔者随意下载了一个下载量高的centos,结果发现内部配置有很多的问题,主要问题是很多软件的版本过于老旧且更新很麻烦,需要手动解决很多的依赖(有的甚至还解决不了,于是果断弃坑)。后来换了一个官方镜像,于是有了很大的改观。(安利一下我用的镜像:https://app.vagrantup.com/centos/boxes/7)

在选择镜像的时候要注意以下几点:

  • 如没有十足的把握,请尽量选择较新且完整版的镜像(尽量不要Minimal)
  • 如果网络条件允许(例如在中国大陆之外)的话,可以直接按照页面上的方法配置。如果网络条件不允许或者速度极慢,可以先按照上面init你的vagrant,然后得到box的下载地址,中断init。然后用迅雷下载此地址到本地再配置,可以大大节省时间。

2、安装git

作为开发机,git是必不可少的,然而一开始也被git坑了好长时间。

首先直接命令安装

yum install git

安装时务必注意版本版本最好不要低于1.8(之前另一个系统git1.7,很多网站上的repo无法正常访问)

接下来就是配置git的一些全局设置

git config --global user.name "HansBug"
git config --global user.email xxx@xxx.com
git config credential.helper 'cache --timeout=7200'

三条设置依次为用户名,用户邮箱和记住密码(本人较懒,不想配置ssh)有效时间(单位秒,例子中为2小时)

3、安装rvm

作为rails环境的搭建,rvm是很重要的一环。

首先安装rvm(如果本机没有curl或者出现其他依赖问题请先解决)

curl -L get.rvm.io | bash -s stable

安装完后如果看到如下的提示的话

  * WARNING: You have '~/.profile' file, you might want to load it,
to do that add the following line to '/home/vagrant/.bash_profile': source ~/.profile

则按照他说的做就好了。

安装完毕后有一个很重要的操作——将原镜像地址换掉。原镜像地址由于某些神秘的原因(你懂得),接下来ruby下载速度奇慢,而且还不稳定。

于是果断执行命令

echo "ruby_url=https://cache.ruby-china.org/pub/ruby" > ~/.rvm/user/db

4、安装ruby

rvm配置完毕之后,下一步就是安装ruby(我使用的是2.3.4版本)

rvm install 2.3.4

然后安装完之后设置为默认版本

rvm use 2.3.4 --default

5、修改gem source

一般来说,ruby安装完之后,gem也就有了。但是因为一些神秘的原因(你懂得),gem原本的source常常下载速度极慢。

首先看一下现有的gem source

gem source -l

反馈是

*** CURRENT SOURCES ***

https://rubygems.org/

这个是rubygem原有的镜像,在大陆访问速度比较慢。我们可以换上ruby-china提供的镜像。操作如下:

gem source -r https://rubygems.org/
gem source -a https://gems.ruby-china.org/

依次是删除原有镜像地址和创建新镜像地址。到此,gem配置完毕

6、安装rails和bundler

如果之前都配置妥善了的话,这一步其实很简单

首先(中间可能会出现部分依赖性问题,可以通过baidu和google自行解决,一般都能找到相关资料)

gem install rails

确认安装完毕后,运行

gem install bundler

7、安装mariadb和redis

其实mariadb在centos上的安装非常简单,直接 yum -y install mariadb mariadb-server mysql-devel 即可(最后一个要是不安装的话,等会bundle install时会出现依赖错误)。

然后就可以 sudo service mariadb start来启动数据库了,十分方便。(关于数据库的设置密码等问题,可以自行百度相关资料,此处不再赘述)

redis的话,在确保EPEL安装了的情况下,也可以直接yum -y install redis,系统服务也配置好了,非常方便。(EPEL的安装请看文末问题区2)

注:在正式部署项目之前,请务必按照development的方式将redis和mariadb的相关配置配置好

关于mariadb的基本初始设置,可以参照博客:http://blog.csdn.net/cenguocheng/article/details/41282663

关于mariadb的远程访问问题,可以参照博客,写的很简洁清晰(不过除了开发机以外的情况下将远程权限赋予全部ip是很不安全的):http://www.cnblogs.com/24la/p/mariadb-remoting-access.html

8、部署项目

首先在项目目录下初始化仓库并添加远程仓库(后面写上你的git地址

git init
git remote add origin *****************.git

然后

git pull origin master

将项目安置好,然后接下来就是rails项目的一般性流程了(特别提醒:在此之前请把指定的database创建好,rails db:migrate没有创建database的能力

bundle install
rails db:migrate
rails db:seed

(注:若在bundle install的过程中遇到相关依赖性问题的话,可以首先查看错误说明,很多错误说明中已经告诉了你如何操作,需要安装什么包。如果没能解决的话请百度或google

最后一步,

rails server -b 0.0.0.0

启动rails服务器,然后我们就可以直接通过3000端口访问本机的网站啦!大功告成

问题区

1、vagrant无法与主机共享文件夹

我这边之前出现过一个问题,将配置文件(Vagrantfile)里面的这行注释去掉

config.vm.synced_folder "data", "/vagrant_data"

启用文件夹共享时,出现了错误

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was: mount -t vboxsf -o uid=1000,gid=1000 vagrant_data /vagrant_data The error output from the command was: mount: unknown filesystem type 'vboxsf'

这个问题解决方案已经知道(感谢博客:http://blog.csdn.net/demon3182/article/details/51436032)。其实很简单,就是缺一个插件,装上就ok

vagrant plugin install vagrant-vbguest

然后reload,问题解决。

2、部分软件包无法找到

这种情况是由于centos7本身带的软件包并不多。所以我们需要安装EPEL(感谢百度经验:http://jingyan.baidu.com/article/9158e0003a3eaca25412280c.html)

操作如下:

yum -y install epel-release
yum repolist

依次是安装epel和刷新软件包列表。我们可以看到,软件包数量增加了很多。

3、将虚拟机映射至ip

其实这一步也很简单,将Vagrantfile里面的这一行注释去掉即可(同时也请保证局域网内ip地址没有冲突,如有冲突,请更换一个ip。另,若是冲突的话,一般在vagrant up & reload的过程中会报错

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

然后网站就可以通过192.168.33.10:3000访问,数据库可以用192.168.33.10链接,甚至也可以用putty通过192.168.33.10的ip地址链接,就像连接你的服务器一样。

win10下vagrant+centos7 rails虚拟开发机配置流程的更多相关文章

  1. [技术博客] win10下vagrant+centos7 rails虚拟开发机配置流程

    由于少昂早年已经在此踩过坑了,因此在这里,我们现在直接贴上他早年的博客链接:https://www.cnblogs.com/HansBug/p/7403306.html

  2. Ruby on Rails入门——macOS 下搭建Ruby Rails Web开发环境

    这里只介绍具体的过程及遇到的问题和解决方案,有关概念性的知识请参考另一篇:Ruby Rails入门--windows下搭建Ruby Rails Web开发环境 macOS (我的版本是:10.12.3 ...

  3. Windows使用Vagrant&VirtualBox搭建虚拟开发环境

    Vagrant 是一款用来构建虚拟开发环境的工具 , 我们可以通过 Vagrant 封装一个 Linux 的开发环境 , 分发给团队成员 ; 成员可以在自己喜欢的桌面系统 Mac/Windows/Li ...

  4. Chromuim开发机配置

    一个出色的程序员需要一台给力的电脑. 之前使用ThinkPad R400笔记本编译Chromium,确实太痛苦了,第一次编译未使用SSD,超过了24小时都没有编译完.后来断断续续折腾了将近一个月才编译 ...

  5. win10 下使用虚拟机安装ubuntu及其网络配置

    通过虚拟机安装ubuntu 我的机器是64位的win10系统,使用的虚拟机VMware workstation 12 pro 安装的是ubuntu 14.04, 网上教程很多,很详细也有有效 win1 ...

  6. windows下Qt5.1 for android开发环境配置(PS:Qt5.2出来了哈,稳定)

    说明:以下开发环境配置过程参考了这些文章: http://qt-project.org/wiki/building_qt-android_on_windows http://www.hyarm.com ...

  7. ubuntu下的apache的虚拟主机的配置

    ubuntu下的虚拟主机的配置相对window下的虚拟主机配置有些许不同. 对于要新建的虚拟主机,我们可以有如下几个步骤: 1.在/etc/apache2/sites-available/目录下新建一 ...

  8. win10下安装centos7双系统

    国庆最后一天了,闲来无事装个双系统,用虚拟机的linux总有些不方便. window下安装linux双系统有两中方法: 1.U盘安装 (我采用的方法,后面详述) 2.EasyBCD工具安装 (使用Ea ...

  9. 安装指南:Win10下安装CentOs7

    系统安装 安装准备 系统:CentOS 7.Win 10 硬件:U盘一枚.PC一台 软件:UltraISO 安装步骤 使用UltraISO将镜像写入U盘 window10使用磁盘管理,空出一个未分配的 ...

随机推荐

  1. 安装GPU版本的tensorflow填过的那些坑!---CUDA说再见!

    那些坑,那些说不出的痛! --------回首安装的过程,真的是填了一个坑又出现了一坑的感觉.记录下了算是自己的笔记也能给需要的人提供一点帮助. 1 写在前面的话 其实在装GPU版本的tensorfl ...

  2. C#工作笔记

    没想到一个Java后端开发还要负责C#桌面程序,我感觉有点方.不过方归方,活还是要干的.简单记录下学到的一些知识点. 1.引用API函数 namespace Demo { class MyUtil { ...

  3. Symbol() 的使用方法

    简介:ES5的对象属性名都是字符串,这就很容易造成属性名的冲突,比如一个项目很庞大,又不是一个人开发 的,就有可能会造成变量名冲突,如果有一个独一无二的名字就好了,这样就能从根本上防止属性名冲突.这就 ...

  4. 解决element-ui 中upload组件使用多个时无法绑定对应的元素

    问题场景 我们在一个列表中分别都需要有upload组件的时候也就涉及到了多个upload同时存在: 因为一般可以在success回调中拿到上传成功的图片已经成功的response,多个也可以,这个没毛 ...

  5. eclipse 常用快捷键 及 windows快捷键

    Eclipse常用快捷键 打开Eclipse快捷键的快捷键 Ctrl+Shift+L 快捷键 描述 原英文描述 Ctrl+Shift+P 定位到光标所在处的括号的另一半括号的位置 Go to Matc ...

  6. Javassist进行方法插桩

    javassist官网 http://jboss-javassist.github.io/javassist/ javassist API网 http://jboss-javassist.github ...

  7. 随记之 -- diy相册

    最近一段时间楼下在整修房子,一到早晨6点多的时候,电钻声.敲打声齐鸣,实在是不能好好的睡个安稳觉 (┳_┳)... 这周六像往常一样,以为又要被惊醒了,所以早早的就醒了,谁知竟然出奇的安静,难道施工队 ...

  8. Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配)

    Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配) Description 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的 ...

  9. 细说Handler

    今天来说说Android一个重要类吧:Handler (我写的博客风格不适合新手,因为我讨厌新手教学,我都是直奔主题,不交代前因后果) 大家都知道Handler的用法一般是线程间的通讯,当然,一个线程 ...

  10. python基础(7):元祖类型(赋值补充)

    前面学了列表和字典,今天我们看一个和列表相似的类型元祖. 预习: 简单购物车 实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用 ...