如何在Windows上部署Rails 3应用程序?

gam*_*mov 7 windows service ruby-on-rails-3

我一直在寻找一种在Windows上可靠地部署Rails 3应用程序的方法.我很震惊,似乎目前没有办法做到这一点.Apache +少数Mongrel服务解决方案目前无法正常工作,因为Mongrel无法在守护进程模式下运行,因此我无法将其安装为mongrel_service.

我猜的要求应该是:

  • 与Rails 3兼容的Web服务器.
  • 必须能够作为Windows服务运行,守护进程.
  • 如果出现问题,必须能够自动重启.
  • 必须是生产质量:没有内存泄漏等.
  • 应该能够扩展,并同时接受多个请求.
  • 减少黑客攻击.

我发现了这些东西:

  • Mongrel没有为Rails 3(1.2.0pre)做好准备,我从控制台窗口快速地遇到内存泄漏.该应用程序刚刚退出.
  • Mongrel不-d使用Rails 3 在守护进程模式()中运行.
  • 因此,Mongrel无法作为服务安装.
  • Windows上没有Phusion Passenger(这将是最好的解决方案).

这些是我提出的可能的解决方案:

  • 获取一个Linux机器,安装Apache + Phusion Passenger并滚动.
  • 然而,使用thin,作者说薄的过程没有"保护".
  • 然而,使用Ngnix,作者说他只是运行了一个默认应用程序,而不是一个完整运行的应用程序.
  • 使用Ngnix.我认为这个解决方案遇到了与上面相同的问题.
  • 使用Linux的虚拟化,但我必须解决自动启动等问题.
  • 在Tomcat中运行JRuby.

这可能是一个方便的工具:http://projectkenai.com/projects/winsw

我希望我们能找到解决这个问题的真正办法.


更新:

我同意JRuby + j2ee容器是最好的选择.有些问题必须像带有扩展名的宝石一样解决.这里有很多有价值的想法:http://rails-nutshell.labs.oreilly.com/ch14.html#production_r259035_id35801805

小智 6

这是我目前运行的设置:

  • Windows服务器2008
  • Apache 2.2
  • 瘦服务器
  • Ruby 1.9.2
  • Rails 3.0.9

这个伟大的教程" 如何使用Windows Server 2008 EE安装和配置Ruby on Rails "涵盖了这些方面的安装.我忽略了LDAP和ActiveDirectory位,但是在那里讨论了一个很好的解决方法来安装瘦服务器,因为它gem 'thin'通常会在Windows上中断.

为了生产我设置MySQL Server 5.5来托管我的数据库.Rails 3需要mysql2适配器,但我的Windows环境尚不支持.mysql适配器也会在Rails 3上引发错误,但作为一种解决方法,您可以通过安装旧版本的libmysql.dll来使其工作.您只需将其放入Ruby192/bin目录即可.

一旦安装了正确的mysql适配器和服务器,您将需要创建数据库:

>> mysql -u root -p  
[enter root pw]  
create database production;  
quit;  
Run Code Online (Sandbox Code Playgroud)

(如果找不到'mysql',您可能需要将MySQL安装添加到路径中.)

最后,设置在your_rails_app/config/database中找到的数据库配置:

# MySQL Production Database
production:
  adapter: mysql
  database: production
  pool: 5
  timeout: 5000
  encoding: utf8
  password: [your_root_password]
  host: localhost
Run Code Online (Sandbox Code Playgroud)

其余的,包括代理设置和作为Windows服务运行,在" 如何使用Windows Server 2008 EE安装和配置Ruby on Rails "中介绍.要确保您的基本精简版设置正确运行:

thin start -p 3000 -e production
Run Code Online (Sandbox Code Playgroud)

这应该使用MySQL数据库在生产模式下在端口3000上启动服务器.这里唯一缺少的是负载均衡,我希望很快能找到答案!