无法找到resources.json

时间:2013-01-22 13:50:58

标签: php restler swagger

由于某种原因,当我使用Restler的API Explorer(Swagger UI的一个分支)将我的API部署到生产时,它在我加载时给出了一般的404错误:

/api/explorer

当我更明确并陈述时:

/api/explorer/index.html

它加载页面的框架,但然后在标题下方的红色文本中报告“404:Not Found ../resources.json”:

enter image description here

我相当肯定有一些环境因为本地相同的文件工作而引起轰动。我还检查了/api/explorer目录中的.htaccess文件,它看起来对我来说是正确的:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ index.html [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.html [QSA,L]
</IfModule>

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:2)

事实证明,所有问题都归结为mod_rewrite问题。我仍然不是百分之百为什么这个问题出现在一个环境中,而不是其他具有完全相同的httpd.conf.htaccess的问题。哦,解决方案是使用RewriteBase指令在关于基本URL的重写规则中明确。

在API目录中,我现在有以下.htaccess文件:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /api
    RewriteRule ^$ index.php [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

在API-Explorer目录中,我现在有以下.htaccess

DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /api/explorer
    RewriteRule ^$ index.html [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.html [QSA,L]
</IfModule>

为了解决这个问题,我遇到的一个非常宝贵的提示是打开Apache的mod_rewrite日志记录。

# Adding logging for Rewrites
RewriteLog logs/rewrite.log
RewriteLogLevel 2

将此放在httpd.conf的任何全局范围区域;我把它放在已经存在的关于日志记录的条目中,但如果你更喜欢它,你也可以把它放在最后。此外,有关重写故障排除的基础知识包括(如果这是基本的道歉):

  1. 确保您的httpd.conf为您提供Restler的目录设置了AllowOverride AllOptions FollowSymLinks
  2. 您可以将所有配置放入httpd.conf并完全避免.htaccess个文件(并且这样也快一点)但如果您这样做,请记住httpd.conf具有绝对网址引用与.htaccess的亲戚关系。

答案 1 :(得分:0)

您可以在Restler Github页面上查看自述文件 https://github.com/Luracast/Restler-API-Explorer#readme

答案 2 :(得分:0)

您是否添加了'Luracast \ Restler \ Resources'类以在API Root创建resources.json?

在您自己的index.php中,addAPIClass部分应如下所示:

  

$r = new Restler();

     

<强> $r->addAPIClass('Luracast\\Restler\\Resources'); //this creates resources.json at API Root

     

// ... your own addApiClass

     

$r->handle();

它位于“使用”下的文档中,但我也很难解决这个问题......

答案 3 :(得分:0)

确保您的api root中具有写入权限的缓存目录