首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Windows上JRuby on Rails部署方案

2012-10-31 
Windows下JRuby on Rails部署方案显然,在Windows下面进行Rails的部署不是最佳的解决方案。但是,做过项目的

Windows下JRuby on Rails部署方案

显然,在Windows下面进行Rails的部署不是最佳的解决方案。

但是,做过项目的人都清楚,很多时候,我们无法自由的选择应用部署所在的环境。其中最常见的场景是下面两个:

?

    客户方有严格的IT管理政策,我们除了遵守,别无选择。我们不得不将应用部署于一台共享的服务器上面,该服务器上面同时运行着多个其他应用。

遇到这样的情况,我们不得不考虑如何在Windows下面部署Rails应用。目前看,有两种较好的方式:

?

    在Windows主机上运行一个Linux虚拟机,将Rails应用部署于Linux虚拟机上面。在Windows上面使用JRuby环境。

今天讨论后者。(后者还有一个小小的好处:对于某些客户,你可以声称正在开发一个标准的java应用。;-) ? )

一、部署JRuby环境

在这里,我偷了一点懒,没有使用JRuby安装包,而是用了BitNami JRubyStack(第三方的安装包,该包将自动安装:JavaSDK, Tomcat, MySQL, JRuby, Rails, Glassfish gem, Subversion等等)

?

BitNami JrubyStack

1.下载BitNami JRubyStack

http://bitnami.org/stack/jrubystack

2.Install BitNami JRubyStack

3.Use BitNami JRubyStack (见开始菜单)

以后所有的终端命令都应该在该窗口下执行。

?

更改mysql默认编码

mysql的默认编码为latin1。

进入mysql,查看默认编码:

?

$ mysql -u root -p$ show variables like 'character%';
?

显示字符编码:

?

+--------------------------+----------------------------+| Variable_name            | Value                      |+--------------------------+----------------------------+| character_set_client     | latin1                     || character_set_connection | latin1                     || character_set_database   | latin1                     || character_set_filesystem | binary                     || character_set_results    | latin1                     || character_set_server     | latin1                     || character_set_system     | utf8                       || character_sets_dir       | C:\PROGRA~1\BITNAM~1\mysql\share\charsets\ |+--------------------------+----------------------------+
?

先暂停jrubystackmysql服务:

修改 C:\Program Files\BitNami JRubyStack\mysql\my.ini

在[client]下面加上:

?

default-character-set=utf8  
?

在[mysqld]下面加上:

?

character-set-server=utf8  init_connect='SET NAMES utf8'  
?

保存,退出

?

重启jrubystackmysql服务:

?

再次查看数据库编码

?

$ mysql -u root -p$ show variables like 'character%';
?

显示字符编码:

?

+--------------------------+----------------------------+| Variable_name            | Value                      |+--------------------------+----------------------------+| character_set_client     | utf8                       || character_set_connection | utf8                       || character_set_database   | utf8                       || character_set_filesystem | binary                     || character_set_results    | utf8                       || character_set_server     | utf8                       || character_set_system     | utf8                       || character_sets_dir       | C:\PROGRA~1\BITNAM~1\mysql\share\charsets\ |+--------------------------+----------------------------+
?

启动mysql

?

$ cd c:\program files\bitnami jrubystack\mysql\scripts$ servicerun.bat START
?

停止服务

?

$ service.bat STOP
?

将mysql安装为服务

?

$ serviceinstall.bat
?

?

Install Rails gems

?

C:\Documents and Settings\Administrator\BitNami JRubyStack projects>jruby -S gem install activerecord-jdbcsqlite3-adapter ruby-debug
?二、Setup Rails App

?

$ cd C:\Documents and Settings\UserName\BitNami JRubyStack projects
$ jruby -S rails myappname
?

更改 config/database.yml

?

development:    adapter: jdbcsqlite3  
?

试运行

?

$ jruby script/server
?

?

更改 config/database.yml

?

production:     adapter: jdbcmysql  
?

创建mysql数据库

?

$ jruby -S rake db:migrate RAILS_ENV=production$ jruby -S rake db:seed RAILS_ENV=production
$ jruby script/server -e production
?三、部署Rails应用到产品环境

产品环境的部署有以下几种方式:

发布war包,使用glassfish gem,使用trinidad gem,使用jetty-rails gem,使用Torquebox

下面依次讨论

?

I. Tomcat + war

使用这种方式,你将部署一个“纯”java应用

打开BitNami终端

?

$ cd myappname
?

使用Warbler gem生成 config/warble.rb 文件

?

$ jruby -S warble config
?

这个文件中包含了将要生成的war文件所需的配置信息。如果你正在使用第三方的gem,则需要将他们的名字加入到config.gems数组中。

?

生成war文件,并将它copy到tomcat的webapps目录

?

$ jruby -S warble war$ copy jrubystack.war c:\Program Files\BitNami JRubyStack\apache-tomcat\webapps

?

启动Tomcat

?

$ jruby -S gem install trinidad$ jruby -S trinidad -e production?

Trinidad配置文件

myappname\config.yml

?

---    port: 8088  # port where trinidad is running    ajp:            # ajp configuration section      port: 8099      allowTrace: true</code>      environment: production  # environment for rails applications  
?

可以将trinidad安装为系统服务

(目前这一步总是出现这样那样的问题,还没有实验成功过。美中不足。)

?

$ jruby -S gem install trinidad_daemon$ jruby -S trinidad_daemon_install
?

另一个插件 trinidad_daemon_extension 不支持windows系统

?

配置Apache

1.安装APACHE

2.更改配置文件

用编辑工具打开Apache2.2目录下面的conf/httpd.conf,需要取消如下模块的注释:

?

LoadModule proxy_module modules/mod_proxy.so    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so  
?

如果你希望对页面输出使用压缩,也需要取消如下模块的注释:

?

LoadModule deflate_module modules/mod_deflate.so    
?

然后按如下内容配置基于HTTP代理的负载均衡:

在httpd.conf文件的最后加入 xml 代码

?

ProxyRequests Off       <Proxy balancer://trini>    BalancerMember ajp://127.0.0.1:8099  </Proxy>            <VirtualHost *:8080>        ServerName localhost         DocumentRoot "C:\Documents and Settings\Administrator\BitNami JRubyStack projects\myappname\public"        ProxyPass /images !         ProxyPass /stylesheets !         ProxyPass /javascripts !         ProxyPass / balancer://trini/         ProxyPassReverse / balancer://trini/         ProxyPreserveHost on       </VirtualHost>  
?

trini定义了群集中的每个trinidad应用服务器节点。

ProxyPass /images !指明该URL开始的请求不代理给trinidad群集,而由Apache自己处理。


IV. Jetty-rails(推荐)

这种方式是基于jetty服务器的

1.安装
$ jruby -S gem install jetty-rails
?2.运行
$ cd myrailsapp$ jruby -S jetty_rails
?3.配置文件
$ jruby -S jetty_rails -c path/to/config.yml
?如果没有 -c 参数,jetty_rails将默认使用config/jetty_rails.yml文件。
在 config/environment.rb 文件中加入如下代码(必须)
ActionController::AbstractRequest.relative_url_root = "/testA"
???JRuby 配置
jruby_min_runtimes: 1  jruby_max_runtimes: 2  
?Jetty 配置
thread_pool_max: 40  thread_pool_min: 1  

The acceptor size is the number of acceptor threads available for that server's channel connector.
acceptor_size: 20

?

Apachejetty-rails不需要与Apache进行集成!详见:?http://wiki.eclipse.org/Jetty/Tutorial/Apache
V. TorqueboxTorquebox是基于jboss的完整解决方案。但是由于安装包巨大(300M),目前还没有机会尝试。

热点排行