我一直在寻找一种在 Windows 上可靠地部署 Rails 3 应用程序的方法。我很震惊,目前似乎没有任何方法可以做到这一点。 Apache + 少数 Mongrel 服务解决方案目前不起作用,因为 Mongrel 无法在守护进程模式下运行,因此我无法将其安装为 mongrel_service。
我猜的要求应该是:
- 与 Rails 3 兼容的网络服务器。
- 必须能够作为 Windows 服务运行,守护进程。
- 必须能够在出现问题时自动重启。
- 必须是生产质量:没有内存泄漏等。
- 应该能够扩展并同时接受多个请求。
- 减少可能的黑客攻击。
我发现了这些东西:
- Mongrel 还没有为 Rails 3 (1.2.0pre) 做好生产准备,我在控制台窗口中很快就遇到了内存泄漏。该应用程序刚刚退出。
- Mongrel 不能在 Rails 3 的守护进程模式下运行 (
-d
)。 - 因此不能将 Mongrel 安装为服务。
- Phusion Passenger 在 Windows 上不可用(这将是最佳解决方案)。
这些是我想到的可能的解决方案:
- 获取 Linux 机器,安装 Apache + Phusion Passenger 并滚动。
- Using thin ,然而,作者说精简过程并没有被“保护”。
- Using Ngnix ,但是,作者说他只是运行了一个默认应用程序,而不是一个完整运行的应用程序。
- Using Ngnix .我认为此解决方案遇到与上述相同的问题。
- 使用Linux的虚拟化,但我必须解决自动启动等问题。
- 在 Tomcat 中的 JRuby 上运行。
这可能是一个方便的工具:http://projectkenai.com/projects/winsw
我希望我们能找到解决这个问题的真正方法。
更新:
我同意 JRuby + j2ee 容器是最好的选择。有些问题必须解决,例如带扩展的 gems 等。这里有很多有值(value)的想法:http://rails-nutshell.labs.oreilly.com/ch14.html#production_r259035_id35801805
最佳答案
这是我目前正在运行的设置:
- Windows 服务器 2008
- Apache 2.2
- 瘦服务器
- ruby 1.9.2
- 轨道 3.0.9
这个很棒的教程“How to install and configure Ruby on Rails with Windows Server 2008 EE”涵盖了这些方面的安装。我忽略了 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;
(如果找不到“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
其余部分,包括代理设置和作为 Windows 服务运行,在“How to install and configure Ruby on Rails with Windows Server 2008 EE”中介绍。要确保您的基本 Thin 设置正确运行:
thin start -p 3000 -e production
这应该使用 MySQL 数据库以生产模式在端口 3000 上启动您的服务器。这里唯一缺少的是负载平衡,我希望尽快找到答案!
关于windows - 如何在 Windows 上部署 Rails 3 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268794/