显然,在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
写道
在终端中进入BitNami主目录
cd C:\Program Files\BitNami JRubyStack\
启动服务
servicerun.bat START
停止服务
servicerun.bat STOP
访问如下地址
http://localhost:8080/myappname
(Tomcat可能需要20秒钟的启动时间)
II. Glassfish gem
不推荐这种部署方式。(我有一个在Oracle工作的哥们儿告诉我:不要再对Glassfish抱什么希望了⋯⋯)
III. Trinidad gem + Apache
这种方式是基于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.
Apache
jetty-rails不需要与Apache进行集成!
V. Torquebox
Torquebox是基于jboss的完整解决方案。但是由于安装包巨大(300M),目前还没有机会尝试。
分享到:
相关推荐
jRuby On Rails WEB 2.0
《JRuby on Rails Web 2.0 实用项目》 英文PDF + 源码
Netbeans 6.0 JRuby on Rails demo
Netbeans 6.0 JRuby on Rails 演示 .swf
JRuby on Rails Web 2.0 Projects
JRuby和Rails-让Ruby语言融入于Java项目
博文链接:https://mmm.iteye.com/blog/207300
jruby_on_rails 开发的很好例子,可以看看,有助与初学者入门
jruby安装包 和 jruby的lib库 JRuby是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与Java库 全面集成。Rails彻底加快及简化了Web应用的开发,不过它让...
JRuby的主要传播网站- Wiki和文章一点JRuby历史 JRuby Wiki以及开始使用JRuby进行学习的方式 JRuby on Rails的Wiki部分 有关在JRuby中进行编程需要什么的文章 该参考资料显示了从Ruby类到Java类的转换 JSR-292和...
Heroku JRuby/Rails4 种子 该项目为在 Heroku 上运行的新 Rails 4 应用程序投影了一个模板。 来吧,部署它:
咖啡碱 当前由rwilliams维护 Theine是设计用于JRuby的Rails应用程序预加载器。 它类似于Zeus,Spring和Spork。 Zeus和Spring的问题在于它们使用了在JRuby上不起作用的`fork'。 time rails runner "puts Rails.env"48...
NetBeans Ruby and Rails IDE with JRuby 2009,大家看标题就知道了啊。。好东西啊,刚得到就发上来了。。
NULL 博文链接:https://digitalsonic.iteye.com/blog/504347
This includes a large number of Java developers who have been enticed by the productivity gains seen with frameworks such as Ruby on Rails, JRuby on Rails, etc. The Web and its environment is a ...