【问题标题】:TRAC add a post scriptTRAC 添加帖子脚本
【发布时间】:2014-09-01 05:59:02
【问题描述】:

我想在网页中使用 trac 数据(票务信息、状态等),因为数据检索非常慢(我解释这是因为我担心我的问题可能是 XY Problem),因此我将所有数据导出到数据库以便更快地访问。

现在的问题是,如果有人更新票证,那么我在数据库中有旧数据。 即使我定期更新我的数据库,那么在两次更新之间也可能有人更新了票证,并且有人可能在网站上请求了信息。

所以我想如果 trac 在每次创建新票证或修改票证后更新我的数据库会怎样。

所以我需要在某处放置一个 post 脚本,每次更新 trac 时都会执行该脚本并更新我的数据库。

如果不可能,那么如果可能的话,我愿意迁移到 Redmine。

更新 1
追踪版本:0.11.5
插件          : 不知道,它的公司记录,我在 GUI 中找不到任何东西
Java api        :XML-RPC
耗时   :20-30 秒

更新 2
这是我的代码

     XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl ();
     config.setBasicUserName ("harry");
     config.setBasicPassword ("my_passwd");
     config.setServerURL(new URL("https://host.domain.com/project/trac/login/xmlrpc")); 
     XmlRpcClient client = new XmlRpcClient();    
     client.setConfig (config); 
     TrackerDynamicProxy xmlRpcProxy = new TrackerDynamicProxy(client);

     Ticket ticket = (Ticket)xmlRpcProxy.newInstance(Ticket.class);

     Vector vector = ticket.query(); // gives all ticket number
         for(Object obj : vector)
            ticket.get((Integer)obj).get(3);     // summary column   


这样每张票几乎需要半秒,而且票很多,所以总共需要大约 20-30 秒。

【问题讨论】:

  • 很高兴了解您遇到问题(响应时间长)的 Trac 安装。请至少包括 Trac 版本、已安装的 Trac 插件及其版本(如果有)以及 Trac db 后端类型。
  • 虽然您可以通过实施ITicketChangeListener 来更新您的数据库以响应票证更改,但我建议您沿着@hasienda 推动您前进的道路前进,试图找出数据检索的原因减缓。 Trac 和您的其他网页是否都来自同一个网络服务器?或者它们是在同一个物理服务器上运行最少,还是在它们之间有快速连接的两个物理或虚拟服务器上运行?
  • 另外你的 Trac 版本太旧了,我建议至少更新到 0.12.5,但最好是 1.0.1(0.12.6 和 1.0.2 很快就会发布)。
  • @RjOllos 我对这个版本无能为力,我只是公司的一名员工,但感谢 TON 的插件,真的在找这个!如果您可以发布类似的答案,可能会带有一个示例,我可以接受该解决方案并关闭此问题。
  • @RjOllos 我已经安装了插件,但是我应该在哪里编写代码,显示的示例是在 python 中,所以我应该把代码放在哪里??

标签: xml-rpc redmine trac


【解决方案1】:

我对@9​​87654322@一无所知。

关于 Redmine:是的,您可以编写一个简单的插件,该插件将使用其中一个钩子或仅向 Issue 模型添加回调。

方式 1(钩子): Here你可以找到一个钩子列表。您可以添加向controller_issues_edit_after_save 发送回调。你可以使用这些变量::params、:issue、:time_entry、:journal(但我认为你只需要issue

方式 2(模型中的回调): 您可以修补模型Issue 以添加回调。您可以添加多个回调,例如after_saveafter_destroy。所有回调的逻辑 - 发送问题数据(或只是通知另一个服务器 id 的问题已更改)。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    正如评论中其他成员所建议的那样,最好找到造成大延迟的原因,所以我调查了一下,发现当您需要多次向 TRAC 发送查询时,最好使用MULTICALL 而不是多次触发单个查询。


    MultiCall 将所有查询打包到一个对象中发送,与多次发送查询相比,开销非常小

    使用多路通话后,我的时间从 20-30 秒减少到 2-3 秒,几乎提高了 10 倍!

    不幸的是,我找不到任何关于如何使用多调用的 java 示例或文档,所以我最终改用了 python。

    简答 Use MultiCall()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 2011-03-21
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      相关资源
      最近更新 更多