想用Sass,但是为什么一定要安装ruby

Python015

想用Sass,但是为什么一定要安装ruby,第1张

linux下ruby编程环境的安装和配置,方法如下:

1、去ruby官方下载安装包,下载地址:

2、解压缩下载的ruby-1.9-stable.tar.gz安装包,进入目录。

su

#./configure -prefix=/usr/local/ruby-1.9

#make

#make install

此时可能出现的错误:

echo executable host ruby is required. use --with-baseruby option.

false ./tool/generic_erb.rb -c -o known_errors.inc

./template/known_errors.inc.tmpl ./defs/known_errors.def

executable host ruby is required. use --with-baseruby option.

make: *** [known_errors.inc] Error 1

出现此问题的原因在于1.9版本的ruby编译需要系统默认安装旧版本的ruby,而ubuntu中默认没有安装。

3、解决方法:

sudo apt-get install ruby

#默认ubuntu10.10会自行安装ruby 1.8,之后再编译1.9就没问题了。

下载1.8.7版本源码编译安装,并设置临时环境变量 ,进入1.8源码目录

su

#./configure -prefix=/usr/local/ruby-1.8

#make &&make install

export PATH=/usr/local/ruby-1.8/bin:$PATH

#此时使用ruby -v验证版本为1.8

4、在刚才安装配置ruby1.8的终端中继续重新进行1.9的编译安装,进入1.9源码目录:

#解压文件

tar vfxz ruby-1.9.1-p0.tar.gz

#进入解压后的文件夹

cd ruby-1.9.1-p0/

#编译源码,编译之前,应该先对/usr/local/ruby-1.9.1文件夹设置权限.

./configure --prefix=/usr/local/ruby-1.9.1

#大名鼎鼎的 make 和 install

make &&make install

#设置PATH路径,把安装的ruby放在系统PATH前面,避免调用操作系统自带的ruby

export PATH=/usr/local/ruby-1.9.1/bin:$PATH

#在 ~/.profile 文件中增加了这样的代码:

if [ -d "/usr/local/ruby-1.9.1/bin" ] then

PATH="/usr/local/ruby-1.9.1/bin:$PATH"

fi

然后 注销 再登陆一次.

#如无意外

ruby -v

#ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux]

#ruby 1.9.1安装成功了.

注意:之前安装了1.8版本ruby,可以直接通过rm -rf /usr/local/ruby-1.8删除即可。

在windows下启动JBoss服务器,需要在命令行中输入run.bat。但是运行后如果你想停止服务器,可能的做法就是直接按Ctrl+C键强行终止服务器,显然这种方式是不友好的。另一种方法就是再开一个cmd窗口,进入Jboss的bin目录,然后键入shutdown.bat -S. 这样毕竟费时费力,如果能像Linux下在命令行的后面加一个&让它在后台运行,要关闭时就不用另开窗口直接输入相应的关闭命令就好了。答案就在下面:

在执行的命令前加上start /b,比如start /b run.bat。就相当于Linux下的run.sh &。

最近在解决探针获取Ruby应用服务器的内存使用的情况,将解决的思路总结一下,希望对此感兴趣的伙伴一起探讨。

先对比应用服务器: Puma 和 Passenger ,下面对比这2个服务器内存统计,

进程模式:直接获取进程id: Process.pid

cluster模式:以启动2个worker进程为例:

从上面截图可以看到,Puma启动后会出现3个进程:1个master进程和2个worker进程。

内存的使用情况(见 RSS 列):

而对于探针来说,一个探针实例是伴随进程一起启动的,也就说一个探针只能识别自己所在的进程id,那如何获取应用服务器使用的内存?我们用其中1个woker进程所在的进程组[ PGID ]看一下:(为啥不是父进程?, 见下文Passenger)

这3个进程都在相同的进程组里,而且进程组号为master的进程id,那我们就可以用这个信息获取应用服务器的所使用的内存:

4.累加进程组内进程内存和即为应用服务器使用内存:

启动Passenger后的Process信息:

对Passenger架构感兴趣的请移步到 这儿 .

查看一下worker所在进程组和父进程:

通过PPID可以看出

Passenger core —>Passenger AppPreloader —>Passenger RubyApp

三者为爷-父-子关系,当服务器请求量增大时 AppPreloader 会产生新的进程来响应请求,从而新的 RubyApp 进程的 PPID 即为 AppPreloader 的 PID ,这样看来就可以将同一个 PPID 的进程加起来得到应用服务器的内存?

由于Passenger会根据服务器的负载量动态调整进程数,当服务器请求量较小时,Passenger会kill多余的进程,会出现下面的情况:

AppPreloader 也被Passenger杀掉了。原 RubyApp 进程的 PPID 变成了1。这时如果服务器的请求量增大,应用服务器进程会成为这样:

Passenger core 产生新的 AppPreloader 进程,并且 AppPreloader 产生新的 RubyApp 进程,这时如果只用 PPID 统计应用服务器内存就会不准确,所以要统计Passenger的使用的内存还得通过累加在同一个进程组( PGID )的所有进程使用的内存和得到。

由于 Unicorn 和 Rainbows 都与Puma的cluster模式[master+worker模式]类似,内存统计的方式可以参考上文的Puma。

由于 Thin 启动多个server后没有类似的特点,上面方法不适用于Thin,有好方法的伙伴们可以告知:smile:

在解决探针统计应用服务器的内存问题上,摸索出了上面的一条路子,如果小伙伴们有其他更好的方式,可以一起探讨一下。