显然,在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则进一步拓展了这一框架的应用范围,允许开发者在Java生态系统中部署RoR应用。这不仅有助于利用Java平台的优势,如企业级支持、性能优化和广泛的库资源,还能让开发者在不牺牲Ruby编程体验的情况下,...
6. **案例研究**:可能包含一些实际项目中使用JRuby on Rails的成功案例,以展示其在真实场景下的优势。 通过阅读《peepcode-code-review.pdf》,开发者不仅可以提升代码审查的专业技能,还能了解如何在Rails项目中...
5. **跨平台兼容**:由于基于 Java,JRuby on Rails 应用可以运行在任何支持 JVM 的操作系统上,包括 Windows、Linux、macOS 和各种 Unix 发行版。 【JRuby on Rails 开发流程】 1. **环境设置**:首先,你需要...
5. **部署策略**:介绍如何在生产环境中部署JRuby和Rails应用,包括使用Tomcat、Jetty等Java应用服务器,以及与持续集成工具如Jenkins的集成。 6. **案例研究**:提供实际的项目案例,展示如何在Java企业级环境中...
标题 "heroku-jruby-rails-4" 指向的是一个专为在 Heroku 平台上部署基于 JRuby 和 Rails 4 框架的应用程序而设计的种子项目。这个项目提供了一种快速启动和运行的方法,帮助开发者能够轻松地在 Heroku 上配置和部署...
JRuby 不仅实现了 Ruby 标准库,还支持 Ruby on Rails 框架,使得 Java 开发者能够利用 Ruby 的生产力特性。 2. JRuby 优势:JRuby 提供了与 Java 平台的深度集成,可以访问所有 Java 类库,同时还能利用 JVM 的多...
在Ruby on Rails开发的世界里,将Web应用程序打包成可执行文件是一个常见的需求,尤其是在需要部署到没有Ruby环境的服务器或者希望提供用户一个独立运行的软件时。标题中的“终于知道怎么把rails Web程序打包成可...
综上所述,Rails Magazine Issue 4不仅涵盖了Ruby on Rails框架本身的技术细节和发展趋势,还涉及到了与Ruby on Rails相关的多个领域,如内容管理系统、数据库操作、跨平台开发等,为读者提供了全面而深入的技术洞察...
3. JRuby 支持使用 JRuby-Rack 运行 Rails 应用,可以在 Java 应用服务器上部署 Ruby on Rails 项目。 4. JRuby 还可以作为 Java 代码调用 Ruby 代码的桥梁,通过 JRuby API 实现 Java 和 Ruby 之间的互操作。 关于...
标题 "Rails相关电子书汇总二" 提供的信息表明,这个压缩包主要包含与Ruby on Rails框架相关的电子书籍资源。Ruby on Rails(简称Rails)是一种基于Ruby语言的开源Web开发框架,它遵循MVC(模型-视图-控制器)架构...
此外,Rails 2.2还增强了与JRuby的兼容性,这有助于提高在Java平台上的部署灵活性。 ##### 文档完善 长期以来,Ruby on Rails因缺乏足够的文档而受到了批评。在Rails 2.2中,开发团队投入了大量的精力来改善这一...
GoCD 中有一小部分较旧的部分在JRuby on Rails中呈现为服务器端,它们利用了一些带有JQuery的旧式纯 JavaScript。GoCD本身用于构建 GoCD。这是设置您的开发环境的指南。贡献如果您能为 GoCD 做出贡献,我们将不胜...
### Ruby on Rails 生态系统概览 #### 执行摘要 Ruby on Rails(简称 Rails)是一种基于 Ruby 语言的开源 Web 应用框架,它强调代码的简洁性和开发者的生产力。自2005年发布以来,Rails 已经发展成为一个庞大的...
这个项目的核心目标是提供一个轻量级且高性能的解决方案,以便在 JRuby 运行环境中运行 Rails 应用,同时充分利用多线程和并发处理的优势。 首先,我们来了解一下 JRuby。JRuby 是 Ruby 语言的一种实现,它使用 ...
这有助于开发者构建混合式开发环境,充分利用Ruby on Rails的开发效率和Java的部署稳定性。 本书还涵盖了测试和持续集成的主题,讲解了如何使用RSpec、Cucumber等测试工具以及Jenkins等CI/CD工具,确保JRuby项目的...
此外,通过将Ruby on Rails部署到JRuby上,开发人员可以利用Java平台的强大性能优势来支持高流量的Web应用程序。 ### 开源与开放标准 Sun在2007年将Java标准版的源代码开放给了开源社区,并且在2008年进一步推动了...
GlassFish还集成了一系列先进技术,如Grizzly's Comet、jRuby on Rails和Metro等,同时提供友好的更新中心和控制界面。 ### GlassFish的企业级功能 对于企业用户,GlassFish提供了全面的功能,包括高性能的Web服务...