此文寫於2017.8.21
在寫本文前,筆者已經嘗試了多種其餘的替代方法,例如wmware虛擬機安裝kylin。然而發現老是還有各類問題。經大佬指點安裝了virtualbox + vagrant。因而發現配置起來如此簡單。接下來筆者將詳細闡述。
(注:筆者本身的服務器上的配置是centos7.2 + ruby2.3.4 + mariadb + redis,本身的筆記本爲win10,另外,不少網上的相似文章都寫於很長時間之前,不少內容如今已經不適用,甚至不少關鍵的環節還不講清楚,致使筆者配置初期踩了不少的坑。因此寫下此文,總結經驗)html
本文中,筆者因爲網站服務器系統爲centos7.2,因此理所應當的選擇了centos的鏡像。(鏡像官網,支持搜索配置:https://app.vagrantup.com/boxes/search。 關於vagrant,此文中再也不贅述,網上關於vagrant+virtualbox的資料不少,基本配置也很是簡單省事)。
起初,筆者隨意下載了一個下載量高的centos,結果發現內部配置有不少的問題,主要問題是不少軟件的版本過於老舊且更新很麻煩,須要手動解決不少的依賴(有的甚至還解決不了,因而果斷棄坑)。後來換了一個官方鏡像,因而有了很大的改觀。(安利一下我用的鏡像:https://app.vagrantup.com/centos/boxes/7)mysql
做爲開發機,git是必不可少的,然而一開始也被git坑了好長時間。
首先直接命令安裝git
yum install git
安裝時務必注意版本,版本最好不要低於1.8(以前另外一個系統git1.7,不少網站上的repo沒法正常訪問)
接下來就是配置git的一些全局設置redis
git config --global user.name "HansBug" git config --global user.email xxx@xxx.com git config credential.helper 'cache --timeout=7200'
三條設置依次爲用戶名,用戶郵箱和記住密碼(本人較懶,不想配置ssh)有效時間(單位秒,例子中爲2小時)sql
做爲rails環境的搭建,rvm是很重要的一環。
首先安裝rvm(若是本機沒有curl或者出現其餘依賴問題請先解決)數據庫
curl -L get.rvm.io | bash -s stable
安裝完後若是看到以下的提示的話centos
* 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下載速度奇慢,並且還不穩定。
因而果斷執行命令ruby
echo "ruby_url=https://cache.ruby-china.org/pub/ruby" > ~/.rvm/user/db
rvm配置完畢以後,下一步就是安裝ruby(我使用的是2.3.4版本)bash
rvm install 2.3.4
而後安裝完以後設置爲默認版本
rvm use 2.3.4 --default
通常來講,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配置完畢
若是以前都配置妥善了的話,這一步其實很簡單
首先(中間可能會出現部分依賴性問題,能夠經過baidu和google自行解決,通常都能找到相關資料)
gem install rails
確認安裝完畢後,運行
gem install bundler
其實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
首先在項目目錄下初始化倉庫並添加遠程倉庫(後面寫上你的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端口訪問本機的網站啦!大功告成
我這邊以前出現過一個問題,將配置文件(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,問題解決。
這種狀況是因爲centos7自己帶的軟件包並很少。因此咱們須要安裝EPEL(感謝百度經驗:http://jingyan.baidu.com/article/9158e0003a3eaca25412280c.html)
操做以下:
yum -y install epel-release yum repolist
依次是安裝epel和刷新軟件包列表。咱們能夠看到,軟件包數量增長了不少。
其實這一步也很簡單,將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地址連接,就像鏈接你的服務器同樣。