如何在tomcat上配置jruby on rails

开发 后端
本文详细讲解了如何在tomcat上配置jruby on rails。

本文介绍了jruby on rails在tomcat的配置实践。由于要在tomcat上部署3个rails项目,暂时使用的版本是rails1.2.3,jdk6 ,jruby1.1.2,tomcat5.5.12

用了一台非常烂的测试机器(p4 2.8  1g),当然,真实服务器比这个要好多了

1.使用rails开发应用之后,使用goldspike打包,不过我老是不成功,所以基本都手动添加,需要的东西主要是

Web-inf下面的lib:

Java代码

  1. jruby-complete-1.1.2.jar     
  2. mysql-connector-java-5.1.6-bin.jar     
  3. goldspike-1.6.jar     
  4. commons-pool-1.3.jar     
  5. activation-1.1.jar   

web-inf下面的gems,从你的ruby gems那里copy过来就可以了

主要有rails,另外由于使用mysql,所以有

Java代码

  1. activerecord-jdbc-adapter-0.8    
  2. activerecord-jdbcmysql-adapter-0.8    
  3. jdbc-mysql-5.0.4    
  4. jruby-openssl-0.2.3 //可选   

2.修改environment.rb,不过貌似rails2是不需要配置这个的

Ruby代码

  1. if defined?(JRUBY_VERSION)     
  2.   require 'rubygems'    
  3.   gem 'activerecord-jdbc-adapter'    
  4.   require 'jdbc_adapter'    
  5. end   

还有database.yml,使用jndi

Ruby代码

  1. production:  
  2.   adapter: jdbc  
  3.   jndi: java:comp/env/jdbc/gdpolice 

最后是production.rb

Ruby代码

  1. config.cache_classes = true    
  2. config.action_controller.consider_all_requests_local = false    
  3. config.action_controller.perform_caching             = true    
  4. config.action_view.cache_template_loading            = true    
  5. config.breakpoint_server = false   

3.配置web.xml

Xml代码

  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <web-app xmlns="http://java.sun.com/xml/ns/j2ee"    
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  4.   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"    
  5.   version="2.4">    
  6.     <context-param>    
  7.         <param-name>jruby.standalone</param-name>    
  8.         <param-value>true</param-value>    
  9.     </context-param>    
  10.     <context-param>    
  11.         <param-name>rails.env</param-name>    
  12.         <param-value>production</param-value>    
  13.     </context-param>    
  14.     <context-param>    
  15.         <param-name>files.default</param-name>    
  16.         <param-value>rails</param-value>    
  17.     </context-param>    
  18.          
  19.     <!-- 设置jruby线程池参数 -->    
  20.     <context-param>    
  21.         <param-name>jruby.pool.maxActive</param-name>    
  22.         <param-value>10</param-value>    
  23.     </context-param>    
  24.     <context-param>    
  25.         <param-name>jruby.pool.maxWait</param-name>    
  26.         <param-value>50000</param-value>    
  27.     </context-param>    
  28.          
  29.     <!-- 其他优化设置:objectspace和jit参数,设置session为db方式 -->    
  30.     <context-param>    
  31.         <param-name>jruby.objectspace.enabled</param-name>    
  32.         <param-value>false</param-value>    
  33.     </context-param>    
  34.     <context-param>    
  35.         <param-name>jruby.jit.threshold</param-name>    
  36.         <param-value>0</param-value>    
  37.     </context-param>    
  38.     <context-param>    
  39.         <param-name>jruby.session_store</param-name>    
  40.         <param-value>db</param-value>    
  41.     </context-param>    
  42.          
  43.     <servlet>    
  44.         <servlet-name>rails</servlet-name>    
  45.         <servlet-class>org.jruby.webapp.RailsServlet</servlet-class>    
  46.     </servlet>    
  47.     <servlet>    
  48.         <servlet-name>files</servlet-name>    
  49.         <servlet-class>org.jruby.webapp.FileServlet</servlet-class>    
  50.     </servlet>    
  51.     <listener>    
  52.         <listener-class>org.jruby.webapp.RailsContextListener</listener-class>    
  53.     </listener>    
  54.     
  55.     <!-- Allow all requests to go to the files servlet first -->    
  56.     <servlet-mapping>    
  57.         <servlet-name>files</servlet-name>    
  58.         <url-pattern>/</url-pattern>    
  59.     </servlet-mapping>    
  60.              
  61.     <resource-ref>    
  62.         <res-ref-name>jdbc/gdpolice</res-ref-name>    
  63.         <res-type>javax.sql.DataSource</res-type>    
  64.         <res-auth>Container</res-auth>    
  65.     </resource-ref>    
  66. </web-app>    
  67.  
  68. <?xml version="1.0" encoding="UTF-8"?> 
  69. <web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
  70.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  71.   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
  72.   version="2.4"> 
  73.     <context-param> 
  74.         <param-name>jruby.standalone</param-name> 
  75.         <param-value>true</param-value> 
  76.     </context-param> 
  77.     <context-param> 
  78.         <param-name>rails.env</param-name> 
  79.         <param-value>production</param-value> 
  80.     </context-param> 
  81.     <context-param> 
  82.         <param-name>files.default</param-name> 
  83.         <param-value>rails</param-value> 
  84.     </context-param> 
  85.       
  86.     <!-- 设置jruby线程池参数 --> 
  87.     <context-param> 
  88.         <param-name>jruby.pool.maxActive</param-name> 
  89.         <param-value>10</param-value> 
  90.     </context-param> 
  91.     <context-param> 
  92.         <param-name>jruby.pool.maxWait</param-name> 
  93.         <param-value>50000</param-value> 
  94.     </context-param> 
  95.       
  96.     <!-- 其他优化设置:objectspace和jit参数,设置session为db方式 --> 
  97.     <context-param> 
  98.         <param-name>jruby.objectspace.enabled</param-name> 
  99.         <param-value>false</param-value> 
  100.     </context-param> 
  101.     <context-param> 
  102.         <param-name>jruby.jit.threshold</param-name> 
  103.         <param-value>0</param-value> 
  104.     </context-param> 
  105.     <context-param> 
  106.         <param-name>jruby.session_store</param-name> 
  107.         <param-value>db</param-value> 
  108.     </context-param> 
  109.       
  110.     <servlet> 
  111.         <servlet-name>rails</servlet-name> 
  112.         <servlet-class>org.jruby.webapp.RailsServlet</servlet-class> 
  113.     </servlet> 
  114.     <servlet> 
  115.         <servlet-name>files</servlet-name> 
  116.         <servlet-class>org.jruby.webapp.FileServlet</servlet-class> 
  117.     </servlet> 
  118.     <listener> 
  119.         <listener-class>org.jruby.webapp.RailsContextListener</listener-class> 
  120.     </listener> 
  121.  
  122.     <!-- Allow all requests to go to the files servlet first --> 
  123.     <servlet-mapping> 
  124.         <servlet-name>files</servlet-name> 
  125.         <url-pattern>/</url-pattern> 
  126.     </servlet-mapping> 
  127.     
  128.     <resource-ref> 
  129.         <res-ref-name>jdbc/gdpolice</res-ref-name> 
  130.         <res-type>javax.sql.DataSource</res-type> 
  131.         <res-auth>Container</res-auth> 
  132.     </resource-ref> 
  133. </web-app> 

注明几点:

jruby.standalone为false的时候,需要定义jruby.home

rails.env就对应rails的那几种环境

jruby线程池有几个参数(需要根据情况来配置),如下:

Java代码

  1. jruby.pool.maxActive #最大运行时数量,默认4  
  2. jruby.pool.minIdle #最小运行时数量 默认2  
  3. jruby.pool.initialSize #运行时初始数量 默认jruby.pool.minIdle 的值  
  4. jruby.pool.checkInterval #检查是否需要更多运行时之间的毫秒数 默认1000  
  5. jruby.pool.maxWait #最长等待时间 默认3000 

jruby.objectspace.enabled貌似默认就是false

jruby.jit.threshold设置使用jit编译的方法数量的阀值,为0表示全部使用jit

jruby.session_store为db表示使用rails的db方式保存session

resource-ref只是针对5..5或以下,6.0不需要这个鬼东西

4.配置tomcat

server.xml(其实跟普通的web应用没什么区别,就是配置数据源什么什么的,不说了)

另外有需要注意的是:

Jruby占用的内存,cpu相当惊人,所以要做好准备,需要配置好tomcat的内存参数(具体还是要配合机器)

Java代码

  1. #catalina.sh     
  2. JAVA_OPTS="$JAVA_OPTS -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=256m"    
  3. #catalina.bat     
  4. set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=128m    
  5.  
  6. #catalina.sh  
  7. JAVA_OPTS="$JAVA_OPTS -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=256m" 
  8. #catalina.bat  
  9. set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=128m   

另外,tomcat服务器优化的就不说了,例如加httpd,调节参数,apr,nio之类。。。

5.其他观察结果:由于部署多个rails,用jconsole监测,内存消耗很大,特别是permsize的消耗,一直维持在85m上下,所以导致真实服务器也出项outofmemory。经过测试,把上个项目的lib提取到tomcat的lib去(只保留一份),permsize仅仅维持在50m那样子。另外要尽量使用jruby的新版本,1.1比1.0的性能提升相当大(感觉非常明显)。后来还启用了jruby的server模式,感觉就是tomcat的启动速度慢许多了。。至于性能提升,暂时还没察觉。。jruby有jit和aot两种编译模式,aot只是试过一下,还没跟jit进行过测试对比,暂时不清楚。

6.以上就是jruby on rails在tomcat的配置实践。jruby on rails的部署方式还是挺不错的。现在很期待jruby。

【编辑推荐】

  1. Jython和JRuby,以及Groovy:Java平台的统一认识模型
  2. JRuby 1.3.0 RC1发布 加强对GAE支持
  3. JRuby中调用java带可变参数的方法
  4. 使用Java Web Start部署JRuby应用
  5. JRuby入门教程:从无到有建立第一个Hello World
责任编辑:佚名 来源: JavaEye社区
相关推荐

2009-07-17 17:34:15

JRuby On Ra

2014-06-30 09:27:17

UbuntuTomcat集群

2019-07-12 16:28:32

MacKubernetes

2009-07-17 17:00:13

在JRuby下将RoR

2015-11-24 14:14:00

CentOS 7.0Ceph配置

2013-03-06 13:27:03

HadoopLinux

2015-11-30 15:05:01

Linux浏览器Docker

2019-10-21 13:28:38

UbuntuPostgreSQL命令

2009-07-20 15:37:26

JRuby安装JRuby配置

2016-01-06 14:00:20

Ubuntu 14Ubuntu 15Apache Solr

2020-03-18 14:40:14

Ubuntu 18.0RedisLinux

2022-12-27 08:51:31

WebDebian 11

2024-01-30 20:06:18

RHELVLAN

2018-03-29 15:21:03

LinuxDebian网桥

2009-12-14 15:37:35

Ruby on Rai

2023-05-24 11:56:06

RHEL 9DHCP服务器

2015-08-04 13:29:06

Fedoralinux

2021-11-05 08:00:00

数据库PostgreSQL开源

2010-05-13 09:07:13

JRuby

2014-10-09 14:35:44

HAProxy负载均衡
点赞
收藏

51CTO技术栈公众号