php-resque-scheduler和resque-web interface URI :: InvalidURIError at / delayed

时间:2014-11-22 02:16:44

标签: php ruby resque resque-scheduler

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

在我最近安装resque-scheduler并根据说明here为resque-web设置配置之前,我没有遇到任何resque-web问题。

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

  

URI :: InvalidURIError at / delayed   错误的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给了我:

  

rack 1.2

     

sinatra 1.4.5

     

拉斯维加斯0.1.11

非常感谢您对此的任何帮助!

更新:我尝试为作业设置别名并传递别名类,这不会破坏界面,所以我认为我原来的假设是正确的。它不是一个真正的解决方案,但是可行。

2 个答案:

答案 0 :(得分:1)

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

NSFileManager *fileManager = [NSFileManager defaultManager];

request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];
[request setRequestMethod:@"POST"];
[request setTimeOutSeconds:120];

[request setPostFormat:ASIMultipartFormDataPostFormat];
[request addRequestHeader:@"Content-Type" value:@"multipart/form-data"];  
if ([fileManager fileExistsAtPath:filePath] == YES) {

    [request setFile:filePath withFileName:@"test.png" andContentType:@"png" forKey:@"FieldName"];
}

答案 1 :(得分:0)

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

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

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

尝试修改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="

那是