0

我正在使用 Chris Boulton 的 resque (php-resque) 和 resque-scheduler ( php-resque-scheduler ) 的 php 端口,我还使用标准 resque-web 界面来查看作业/队列等。

在我最近安装 resque-scheduler 并按照此处的说明为 resque-web 设置配置之前,我对 resque-web 没有任何问题。

使用 php-resque-scheduler 我没有任何问题(似乎)安排我的队列延迟,但是当我登录 resque-web 并单击“延迟”选项卡时,我收到以下错误:

URI::InvalidURIError at /delayed bad URI(不是 URI?):/delayed/jobs/Namespace\Of\Job\Class?args=[%7B%22

只有将作业设置为延迟时,我才会收到此错误。

我的感觉是 PHP 类的命名空间正在破坏 resque-web 路由。我有点难过,因为我对 Ruby 不太熟悉,也不热衷于编辑包文件等。

如果有帮助,我正在 Ubuntu Trusty 14.04 上运行 ruby​​ 1.9.1。做resque-web -v给我:

机架 1.2

西纳特拉 1.4.5

拉斯维加斯 0.1.11

对此的任何帮助将不胜感激!

更新:我尝试为该作业的类起别名并通过别名类传递,这不会破坏接口,所以我认为我最初的假设是正确的。这不是一个真正的解决方案,但可行。

4

2 回答 2

1

我的解决方案是在 php 中为类设置别名并将别名传递给作业:

class_alias('My\NameSpaced\Class', 'My_NameSpaced\Class');
于 2015-04-27T15:23:20.733 回答
0

我也有这个问题,原因是 resque-web 尝试获取类名的 URI,但是你的类名有反斜杠,这是因为 PHP 命名空间,所以 ruby​​ 说“Bad URI”,重点是 ruby​​ 没有帮助我们来逃避uri。

我不熟悉 Ruby/Rails,我只是尝试将 resque 集成到 php,所以我只需要网络监视器来查看我的队列/作业状态

所以这是我解决这个问题的解决方法,仅供参考,我知道这不是最好的方法。

尝试在 gem 资源中修改 resque-scheduler 的视图

// find your resque-scheduler gem path and modify the delayed.erb file
vim ~/.gem/ruby/2.0/gems/resque-scheduler-4.0.0/lib/resque/scheduler/server/views/delayed.erb

// search this line
URI("/delayed/jobs/#{job['class']}?args="

// modify to
URI.escape("/delayed/jobs/#{job['class']}?args="

就是这样

于 2015-04-27T11:44:11.310 回答