我真的不明白的一件事是如何将自定义启动选项传递给杂种实例。
我看到一种常见的方法是使用环境变量,但在我的环境中这不起作用,因为我的 rails 应用程序服务于许多不同的客户端。许多代码在客户端之间共享,但也有许多差异,我通过子类化控制器和视图来重载或扩展现有功能或引入新功能。为了使这一切正常工作,我只需将路径添加到客户端特定模块的模块加载路径 ($:)。
为了启动特定客户端的应用程序,我现在可以使用一个环境变量,比如 TARGET=AMAZONE。不幸的是,在某些系统上,我运行多个 mongrel 集群,每个集群服务于不同的客户端。其中一些系统在 Windows 下运行,为了启动 mongrel,我安装了 mongrel_services。显然,这使我的环境变量不合适。
将这些额外的数据传递给应用程序被证明是一个真正的挑战。首先,mongrel_rails service_install 将拒绝任何未记录的 [自定义] 命令行参数。我不太担心使用安装程序安装服务是微不足道的。
但是,即使我设法安装 mongrel_services 以便在运行时将自定义命令行选项 --target 传递给 mongrel_rails start,我也会收到错误消息,因为 mongrel_rails 无法识别开关。
所以这是我看过的东西:
传递一个额外的参数:
mongrel_rails 开始 --target XYZ ...
使用配置文件并添加目标:XYZ,然后执行:
mongrel_rails 开始 -C x:\myapp\myconfig.yml
修改文件:
红宝石\lib\ruby\gems\1.8\gems\mongrel-1.1.5-x86-mswin32-60\lib\mongrel\command.rb
也许我可以使用 --script 选项,但我在上面找到的所有文档都是针对 Unix 的
1和2根本不起作用。我和 4 一起玩过,但从来没有让它做任何事情。所以我别无选择,只能选择 3。虽然它相对简单,但我讨厌更改 ruby 库代码。
特别令人失望的是 2 不起作用。我的意思是在配置文件中添加其他 [自定义] 选项有什么不合理的?实际上,我认为这是 Rails 中缺少的基本部分。不知何故,应用程序应该能够注册和访问它期望的命令行参数。
如果有人知道如何使用当前的基础设施更优雅地做到这一点,我有一条巧克力鱼要赠送!!!