猫窝私语 — Makumo's Blog

玛酷猫的温馨小窝,记录生活点点滴滴。

@玛酷猫7 年前

03/23
15:12
Ruby

Rails5踩坑系列——Vagrant和NFS共享文件夹

新年新项目,被老项目折腾大半年后,部门一直认为新项目要脱离老的Rails3.2版本,拥抱新版本。先准备前期环境,对应的安装了最新的Ruby2.5和Rails5.1.5,开始项目后台框架搭建工作。同事用vm搭建的虚拟机环境,没啥问题,我是用的Vagrant搭建的虚拟机环境,由于Vagrant自身共享模式很慢,一直配置着vagrant-winnfsd插件使用NFS来做文件共享,速度是快很多,就是经常性会遇到I/O错误,关掉日志防止频繁写入共享盘就好了。新项目跑起来就开始报错,报错信息类似如下

Errno::EEXIST at / File exists @ dir_s_mkdir - tmp/cache/assets/sprockets/v3.0/jG

网上搜了一下,发现一篇博文说到这个,传送门,大体意思就是NFS是大小写不明感,rails在运行中会将assets生成静态文件缓存,存在tmp/cache/assets/sprockets/v3.0/ 目录中,文件按照前两位字母建立文件夹归档,这时候就会遇到类似jg、JG、jG、Jg属于4个不同文件夹,但是NFS大小写不明感,就会认为是一个,在创建的时候就会返回文件夹已存在的问题,文中给出的方案是修改配置文件,将这个文件移出共享文件夹。由于不想将虚拟机原始文件系统里面放置额外的文件,这个方案被我否定了。查了下原来项目里面老版本文件缓存情况,类似的结构和生成方式,不过生成的文件缓存文件名都是大写,文件夹也都是大写,就不存在大小写的问题。本想找办法对应修改下,翻了下Asset Pipeline相关文档和sprockets的相关配置,都没有找到,遂放弃这个办法。在查看文档中,有关于静态资源文件缓存的存储方式的说明,默认似乎是文件方式,文档给出的修改例子是内存方式,于是在development.rb中添加这个配置,重启项目,一切OK。下面的禁用方式也试了下,影响速度还是很明显,同样不考虑。

此外上述文中还提到了其他几种由于NFS大小写不明感而引起的问题以及处理办法,目前暂时还没遇到。下次遇到了也心里有数了。

Rails5踩坑系列——Vagrant和NFS共享文件夹

@玛酷猫7 年前

06/24
22:45
Ruby Linux

用Vagrant和VirtualBox搭建Windows下的Ruby on Rails 开发环境

PS:做个系列,记录下各个知识点,方便以后回顾查询,就叫Ruby:从入门到放弃好了(大雾)。

虽然都推荐在类Unix环境上面做Ruby的开发,更贴近于真实服务器的环境,同时也不会遇到各种Windows上奇葩的坑,不过考虑类Unix也同样存在学习成本,并不是主要学习方向,同时也需要在Windows下跑其他一些应用,比如游戏什么的,经过搜索娘的指引,选取这种折中的方法,在Windows平台下使用虚拟机跑类Unix系统。

首先还是安装对应的一系列软件了:

差不多就这么多吧,乱七八糟都装好后就开始配置了。
在工作目录新建一个文件夹,比如Ruby_project,win+x进入命令提示符,使用cd命令进入刚刚建立的文件夹,然后用下面命令配置

#添加box到vagrant列表,比如box存放在d盘根目录
vagrant box add centos7 vagrant-centos-7.2.box
#初始化,会在目录下生成Vagrantfile的配置文件
vagrant init centos7
#启用
vagrant up
#关闭虚拟机命令
vagrant halt
#重启虚拟机命令
vagrant reload

启动起来后,虚拟机会挂载Ruby_project到虚拟机的vagrant目录下面,这时候用secureCrt连接虚拟机,账号密码都是vagrant,root密码同样是vagrant
由于没有单独配置虚拟机的IP地址,默认虚拟机也会使用127.0.0.1来访问,这需要配置下Vagrant的环境,将访问端口映射到虚拟机上,编辑目录下面的Vagrantfile文件,加入下面的端口配置,整体文件看起来像这样

Vagrant.configure("2") do |config|
 config.vm.box = "centos7"
 config.vm.hostname = "dev"
 config.vm.network "forwarded_port", guest: 3000, host: 3000
 config.vm.network "forwarded_port", guest: 80, host: 8080
end

Rails端口使用3000,Nginx的80端口映射到本机的8080端口。其实单独配置IP更方便一些,以后端口一多,一个一个配置很麻烦。
重启后登录虚拟机,开始配置虚拟机的Rails环境

#更新yum
yum update
#安装EPEL
yum install epel-release 
yum repolist
#安装依赖库
yum install curl-devel nano sqlite-devel libyaml-devel
#安装RVM,安装指定版本的Ruby
gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh #set up system environment for Ruby, 这步不可少
rvm reload
rvm install 2.0.0 #这里指定ruby版本
#由于众所周知的原因,修改gem的源
gem source -r https://rubygems.org/
gem source -a https://gem.ruby-china.org
#安装nodeJs作为JavaScript的运行环境
yum install nodejs
#安装指定版本的rails
gem install bundler
gem install rails -v 3.2.12 
#安装nginx
yum install nginx

到这里虚拟机环境基本配置完毕了,其他各个插件根据各个项目中的Gemfile在bundle install中进行安装和调整。
在vagrant目录下,输入以下代码

#新建一个项目
rails new hello_world
#进入项目目录
cd hello_world
#检查并安装对于的gem
bundle install
#启动项目
rails s

打开浏览器,输入127.0.0.1:3000 就能看到rails的默认欢迎页了。

启动RubyMine,在之前Ruby_project目录下会出现hello_world的项目目录,直接用RubyMine打开这个文件夹,就能看到该项目的具体源码,这样在IDE中的源码修改会直接作用于虚拟机上。

PS:在Windows下使用Vagrant存在一个问题,就是由于VirtualBox虚拟机的共享文件机制的I/O问题,项目跑起来后,在浏览器浏览很非常的慢,从日志上面看各种资源的读取时间都是几十甚至几百毫秒。网上都说更改共享方式,使用nfsd方式,不过我改过后无法挂载共享盘。问题还没有彻底解决。准备换种共享模式,虚拟机共享目录,本机连接虚拟机的共享目录,这样项目实质是存在虚拟机上,避免I/O的缓慢问题,IDE读取文件慢可以接受,毕竟不会一次打开很多页面。

用Vagrant和VirtualBox搭建Windows下的Ruby on Rails 开发环境

@玛酷猫8 年前

06/10
22:51
心情点滴 Ruby

Re:从零开始的Ruby之路

离开上一家公司也有一个月了,告别繁忙的工作,卸掉各种压力,清空脑子里乱七八糟的字母符号,早上起来锻炼下身体,买菜做饭,洗衣带伢,虽然依旧很累,不过心态大不一样,节奏慢下来也蛮好,难怪很多人最大的理想就是不上班。不过修仙也还是要经济支持的,放松一个月,参加了下高中20年的同学聚会,带着家人到周边小玩了下,口袋就见底了。开始要苦逼的开始找工作了。正好一个朋友所在新公司正在招人,看我闲着就问我过来聊聊,真是刚想睡觉就有人送来枕头了。枕头是送来了,你能不能睡上去还要另说。约好时间聊了聊,项目还是不错的,教育领域、院校信息化、云平台,也都是现在比较热门的领域,不过一说开发语言就有点懵逼了,项目用Ruby on Rails开发的。ROR到不陌生,至少很久以前听说过,也简单了解过。那还是N多年前,在日常浏览订阅的技术文章时,看到javaEye的创始人robbin的一篇心路历程的文章,才知道Ruby这门语言的存在,那时候还属于菜鸟级码农,也就简单的了解了下,没想到多少年后,自己居然会走到这条开发道路上来。

答应朋友的邀请加入这个团队之前也考虑了几天。这几年的状态一直都不是很好,总说程序猿到了35岁是个坎,其实也就是借口罢了,虽然说随着年龄的增长,精力思维能力都有一定的退步,不过经验也在逐步的积累,两者相抵其实整体能力还是稳中有升的,最主要可能在PHP上面走进僵局了,一方面很长一段时间没有参与过大项目的开发工作,每天的时间都消耗在零碎的小事上,慢慢的也磨疲了,另一方面虽然PHP在不断的发展,很多新功能新开发思路和解决方案也在不断涌现,不过所在地方大部分公司所需要的也就是基本功能,没有太多更高层次的需求,更多的精力投放在怎么做业务,怎么盈利,对技术投入寥寥无几。其实上一家公司项目也很不错,项目领导人也很有想法,在本地还是空白,坚持做下来也很有市场和影响力,很可惜在现在这个大环境下,投资人更看重的是怎么更快的收回成本,如何更快的盈利,各方面降低成本,以至技术团队迟迟无法组建,项目开展缓慢,最终免不了项目完全砍掉的结果。其实这样也好,换一个环境,一切都是新的,都是未知的,说不定对自己是个很好的调整机会。面试的时候,技术股东对我说,其实单从转型来看,JAVA转Ruby是最快的,毕竟从思想上面来说,两者很多相通之处,在本地几乎没有Ruby的开发人员情况下,招人也大部分也是选择JAVA开发人员,PHP转Ruby是有些过程的,毕竟PHP很多面向对象的思想是缺失的,不过语言是相通的,他相信我这么多年的工作经验,这点困难应该不是什么大问题。于是乎,自己答应了对方的邀请,算是对自己的一次历练吧,或许有些新的突破也说不定呢

下周就要去上班了,套用从入门到放弃系列,自己P了张封面,大家共勉。

从入门到放弃系列Ruby版

Re:从零开始的Ruby之路