【问题标题】:How to pass deployment settings to application?如何将部署设置传递给应用程序?
【发布时间】:2018-02-12 23:59:11
【问题描述】:

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

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

【问题讨论】:

    标签: qooxdoo


    【解决方案1】:

    您可以使用 qx.core.Enviroment 类为您的项目添加/获取配置。推荐的方法是只在编译时使用,但是如果你想在运行时配置你的应用程序,有一个技巧。

    编译期间的配置

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

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

    在运行时

    警告 qooxdoo 不支持/记录此方法。基本上这是一个 hack

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

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

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

    【讨论】:

    • 在编译期间配置环境键是为 qx.core.Environment 预设值的唯一方法 - 您在运行时展示的方法涉及修改未记录的配置,因此不受支持。
    • @johnspackman 是的,你是对的,我会在这个方法中添加警告。
    • 这就像一个冠军!我在 config.json 中创建了两个新的构建选项,每个都自定义了我在应用程序中引用的环境设置。
    【解决方案2】:

    最简单的方法是从window.location 即时编写您的AJAX URL;理想情况下,您可以使用window.location.origin,对于此 StackOverflow 网站,它是“https://stackoverflow.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/

    【讨论】:

    • 是的,我考虑过这个,但后来我认为从本地文件加载应用程序会中断,不是吗?
    • 是的,您是正确的,在这种情况下,Stelios 的答案是唯一没有硬编码的解决方案 - 尽管您会遇到 CORS 问题(除非您已经响应 OPTIONS 请求并明确提供“访问-*" 响应头)
    猜你喜欢
    • 2016-08-07
    • 2020-11-14
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2018-01-25
    • 2017-01-19
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多