如何将部署设置传递给应用程序?

How to pass deployment settings to application?

我正在尝试将由 CherryPy 托管的 Web 服务支持的 Qooxdoo Web 应用程序部署到服务器上。但是,我需要使用应用程序所在服务器的主机名配置客户端 Qooxdoo 应用程序,以便 Ajax 回调解析到正确的主机。我有一种感觉,我可以使用 generate.py Qooxdoo 脚本的功能来生成具有此适当设置的客户端代码,但是通读文档并没有帮助弄清楚如何做。有人有什么建议吗?

(FWIW,我知道我将如何使用 PHP 之类的东西和不同的客户端框架(例如 Echo 3)来解决这个问题——我将索引文件设为 PHP在发送回客户端代码之前读取本地系统配置文件的文件。但是,在这种情况下,generate.py 文件是工具链的必要部分,所以我看不出如何简单地做到这一点.)

您可以为您的项目使用qx.core.Enviroment class 到add/get 配置。推荐的方法仅在编译期间,但如果您想在 运行 时间内配置您的应用程序,则有一个 hack。

编译时配置

如果要在编译期间配置环境,请参阅this

在这两种情况下,在您将任何环境变量添加到您的应用程序后,都可以使用 qx.core.Environment.get 方法访问它。

在运行时间

警告此方法不是来自 qooxdoo 的 supported/documented。基本上这是一个 hack

如果您想在 运行 时间提供一些环境配置,您必须在 qooxdoo 加载之前执行此操作。为此,您可以在网页中添加一些 javascript,例如

window.qx = { };
window.qx.$$environment = {
 "myawsomeapp.hostname": "example.org",
};

这应该在 qooxdoo 开始加载之前添加到您页面的某处,否则它不会产生理想的效果。这种方法的优点是您可以将配置推送到客户端,例如一些 api 键在您的应用程序实例之间可能不同。

最简单的方法是在 window.location 中即时编写 AJAX URL;理想情况下,您可以使用 window.location.origin,对于这个 Whosebug 网站来说,它是“https://whosebug.com”,但在 IE 上存在问题。

跨平台解决方案是:

var urlRoot = window.location.protocol + "//" + 
  window.location.hostname + (window.location.port ? ':' +
  window.location.port: '');

这意味着您的 URL 将始终正确,即使服务器名称发生变化(例如,您在测试服务器上而不是生产服务器上)。

详情请看这里: https://tosbourn.com/a-fix-for-window-location-origin-in-internet-explorer/