【问题标题】:Oracle Apex Ghosting Javascript external file (bug?)Oracle Apex Ghosting Javascript 外部文件(错误?)
【发布时间】:2015-04-20 07:30:27
【问题描述】:

这是一个棘手的问题(至少对我来说):

我创建了一个 Javascript 文件,我们称之为“test.js”,我将它上传到共享组件 -> 静态文件存储库,但没有特别关联任何应用程序。

该文件已被页面 X 引用,没有缓存设置,在 Javascript -> 文件 URL 字段中,如下所示:#WORKSPACE_IMAGES#test.js

到目前为止一切顺利,库中的函数已被正确调用和执行。

但是我在文件中遇到了一个小错误,我已经着手更正,然后在文件的上传版本中进行了修改(文件小于 30000 字节,我能够当场修改它,点击应用更改)。在此之后,我删除了浏览器上的历史记录和临时文件。但是,当我再次运行该页面时,错误仍然存​​在,因为如控制台所示,使用的文件是以前的文件,而不是固定版本。有点奇怪......好吧,但这还不是全部,我决定从存储库中删除文件并再次上传(同名“test.js”),再次没有应用程序关联,删除历史记录和临时文件再次浏览器,并运行页面(再次)。再次(呵呵......)错误仍然存​​在,并且被调用的文件是不存在的。

所以最后我决定做一个小魔术并删除文件但不上传它,在页面属性上留下对#WORKSPACE_IMAGES#test.js 的引用,在浏览器上删除历史记录和临时文件并运行它再一次,这一次决定打破页面,但它仍然有效!,错误地因为它是错误文件但它在那里!然后我说:“好的,浏览器问题..”,在 Chrome 上运行它(第一次曾经)和它在那里的文件,然后我说:“好的,机器问题..”,在新机器上运行它(第一次)和它被加载的同一个不存在的错误文件......

此文件尚未被任何其他应用程序引用(目前)。在运行时,不存在的 url 文件是:

http://192.168.141.14/apex/wwv_flow_file_mgr.get_file?p_security_group_id=3321831433497474&p_fname=test.js

我已经用新名称上传了同一个文件,比如说 test_1.js,将页面引用更改为这个新名称,然后页面加载正确的新文件。但这不是一个可取的行为,我很幸运这是对文件的第一次引用,但如果这发生在更高级的阶段,那将是一个大问题。

很抱歉让它有点广泛,但我试图彻底解决这个问题,我错过了什么吗?为什么会这样?任何帮助将不胜感激。

我正在使用:

APEX 版本 4.2.3.00.08

数据库

  • 核心 11.1.0.7.0 生产
  • NLSRTL 版本 11.1.0.7.0 - 生产
  • Oracle 数据库 11g 企业版版本 11.1.0.7.0 - 64 位
  • 生产 PL/SQL 版本 11.1.0.7.0 - 生产
  • 适用于 Solaris 的 TNS:版本 11.1.0.7.0 - 生产

【问题讨论】:

  • 听起来完全像是一个缓存问题。我认为您可以在 Apex 中设置文件在 WORKSPACE 中缓存多长时间的选项
  • @KevinBrown 你会怎么做?
  • 我必须在这里做点什么,使用此文档docs.oracle.com/cd/E21611_01/doc.11/e21058/…,因为 www_flow_files* 在我的配置中缓存了所有图像。
  • 有时您也可以在 url 上添加一个随机参数,如 ttp://192.168.141.14/apex/wwv_flow_file_mgr.get_file?p_security_group_id=3321831433497474&p_fname=test.js?random=7386734 其中“random " 每次调用都会改变
  • @KevinBrown 让我明天试试,稍后再回复你。

标签: javascript oracle oracle-apex


【解决方案1】:

我找到了解决此问题的方法,看起来它自 APEX v3.1 以来就一直存在

从 PLSQL Developer 以 apex 工作区所有者身份运行以下代码:

set serveroutput on
declare
  l_security_group_id number;
begin
  select workspace_id into l_security_group_id
  from   APEX_040200.APEX_WORKSPACES;

  wwv_flow_api.set_security_group_id
      (p_security_group_id => l_security_group_id);

  wwv_flow_api.create_or_remove_file
    ( p_name           => 'test.js'
    , p_location       => 'WORKSPACE'
    , p_mode           => 'REMOVE'
    , p_type           => 'JS'
    );
  commit;
end;

第一部分将 apex 引擎设置为指向 Apex 中正确的工作区 ID。

第二部分是应该从数据库中删除您的文件的过程。

不过,如果 apex 引擎按预期删除了文件,则不需要这样做...

【讨论】:

    【解决方案2】:

    我已经多次看到这个问题(例如https://community.oracle.com/thread/867412?start=0&tstart=0),我觉得这是一个已知问题,但我找不到合适的参考

    这是关于该主题的更深入的对话 https://community.oracle.com/thread/674635?start=0&tstart=0

    我发现删除文件并重新加载是一种解决方法,或者将文件存储在网络服务器上 - 如果可能的话。

    【讨论】:

    • 嗨,斯科特,感谢您的回复,很高兴知道我不是唯一遇到此问题的人。正如我在问题上所说,我什至删除了文件而不再次上传它,但它仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2014-05-29
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多