WebObjects/Web 应用程序/开发/直接连接
默认情况下,Xcode 和 Eclipse/WOLips 都会配置您的应用程序以使用直接连接。当您的 WebObjects 应用程序启动时,它将在特定端口(由 WOPort 配置选项分配)上监听。在完整的部署场景下,该端口由 mod_WebObjects 适配器或 WebObjects cgi-bin 适配器用于在 Apache 和您的应用程序之间进行通信。但是,也可以完全在直接连接端口上运行开发(即没有 Web 服务器)。在此配置中,一个显着的区别是,所有资源都由直接连接服务器提供,而不是由 Apache 提供资源,在 Apache 场景中,资源由 Apache 直接提供,而您的 WebObjects 应用程序只处理应用程序请求。
警告- wotaskd 依赖于直接连接启用,以便适配器能够与之通信。不要在您的服务器上全局禁用直接连接。例如,如果您从应用程序服务器主目录中的 WebObjects.properties 文件中禁用直接连接,您将阻止 wotaskd 在其分配的端口上响应请求。
- 配置您的 Apache 以使用 mod_WebObjects 或 cgi-bin 适配器
- 确保 wotaskd 正在运行
- 将 WODirectConnectEnabled 设置为 false
- 设置您的 WebServerResources 文件夹,使其可由 Apache 访问
- 获利
我听到了所有关于直接连接很糟糕的评论,而且我一直被它的怪癖困扰着,但我想知道那些避开直接连接的人他们的工作流程是什么以及他们如何从中受益(尤其是如果他们使用 Eclipse/WOLips)。
我仍然使用直接连接,主要是因为我习惯了工作流程,而且现在已经弄清楚了大多数可能出错的事情。我喜欢我的所有开发资源都集中在一个项目中,而且在我使用直接连接时,我在 WOBuilder 中似乎得到了一些好处。
也许是因为我大多数项目都主要关注数据而不是展示(我只有一些图形和偶尔的样式表——尽管我开始更多地使用样式表),而且我经常在 Windows 和 Mac 上开发(因此脚本编写可能会很痛苦)。我的应用程序还没有因为加载图形的速度而受到影响(数据库访问的速度要快得多)。
我并不害怕 Web 服务器,我只是懒惰 :),而且不习惯在“拆分部署”而不是“拆分开发”的情况下进行工作流程。您如何对您的 Web 资源进行版本控制和管理,这些资源位于与您的开发资源完全不同的位置(您在 Eclipse 中使用资源文件夹,还是使用单独的项目?或者使用我尚未了解的一些其他不错的 Eclipse 功能?手动复制)。您如何处理跨开发/暂存/生产环境的部署?您需要对项目进行多少自定义或修改?
对于具有大量展示或专门图形设计师的网站,我肯定能看到使用 Web 服务器的真正优势,但我通常在一个由 2-4 名开发人员组成的团队中,展示很少。
我相信存在比我正在使用的更好的工作流程,我很好奇其他人认为 WO 的最佳开发和部署实践是什么。我错过了什么?
首先,不仅仅是关于图像。它是关于拥有一个真正的 Web 服务器的强大功能,以及关于避免只在您将应用程序迁移到通过真正的 Web 服务器运行时才会出现的问题的。想想以下事情
- 缓存,mod_expires 不是您的朋友
- HTTPS
- SSI
- 重写规则
- 仅在通过 Web 服务器访问时才会出现的标头
我相信您能想到更多区别。我宁愿使用我在部署中会获得的所有服务进行开发,而且还要找到在应用程序运行了半天之后出现的错误!我更愿意在闲暇时体验痛苦,而不是在恐慌中体验痛苦。而且,至少在 OSX 上,启动 Apache 非常容易。
至于工作流程,什么工作流程?我们从源代码库中看到的“项目”是一个文件夹层次结构。一个是用于代码,这是 WO 项目所在的位置。另一个是 DocumentRoot,这是文档根目录所在的位置。其他文件夹用于文档、设计、测试等。将每个文件夹签出到其对应位置非常容易。如果您的图像大多是静态的,那么需要做的就更少了。如果它们经常更改,那么设计师等可以签出和签入他们需要的部分,以一种对他们非常熟悉的方式,而无需费心去弄清楚像 Eclipse 项目这样的玄妙的东西。您本地文档根目录的图像更新与您工作空间的代码更新方式相同。
对于部署,我们有脚本可以对所有代码进行命令行 Ant 构建,将所有资源(包括文档根目录)打包成 tar 文件,并一般性地创建一个安装包。目标服务器上的另一个脚本接收该包,将其解压缩,并将这些部分复制到它们需要去的位置。我不明白为什么必须进行拆分安装会让这变得更容易。