Настройка службы RESTful для Backbone.js с apache и windows

Я пытаюсь настроить веб-службу RESTful на моем локальном хосте apache, чтобы она служила серверной частью для моего магистрального приложения. Я пытался:

  1. Настройка WebDAV, но в журналах появляются следующие сообщения об ошибках

    [Чт, 23 февраля, 21:46:17 2012] [ошибка] [клиент 127.0.0.1] Невозможно разместить новое содержимое для /clusters/19. [403, #0], реферер: http://ideas.localhost/ [Чт, 23 февраля, 21:46:17 2012] [ошибка] [клиент 127.0.0.1] Произошла ошибка при открытии ресурса. [500, #0], реферер: http://ideas.localhost/

  2. Использование Backbone.emulateHTTP, которое вызывает 405 method not allowed error (что-то, я думаю, вызвано заголовком X-HTTP-Method-Override: PUT, поскольку обычные запросы POST работают нормально

Я использую Apache 2.2.21 и PHP 5.3 в Windows 7, а ниже мой файл .htaccess. Я также использую структуру SLIM для обработки маршрутизации URL-адресов.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

И конфигурация виртуального хоста

<VirtualHost *:80>
    DocumentRoot "G:/sites/ideas"
    Dav On // I also had security setting set to Allow all as it's just my localhost
    ServerName ideas.localhost
    ErrorLog "logs/ideas.localhost-error.log"
    CustomLog "logs/ideas.localhost-access.log" combined
    SetEnv APPLICATION_ENV development
</VirtualHost>

Я изо всех сил пытался заставить что-то работать целую вечность, поэтому любая помощь очень ценится.


person wheresrhys    schedule 23.02.2012    source источник
comment
Вы делаете поддомен на локальном хосте?   -  person Bakudan    schedule 27.02.2012
comment
Да, конфиг вставил выше   -  person wheresrhys    schedule 27.02.2012
comment
Кроме того, и обновление - я так увяз в конфигурации сервера с помощью веб-dav, что, когда я включил Backbone.emulateHTTP, я пренебрег какой-либо надлежащей отладкой PHP. Оказывается, SLIM получает запрос, а затем выдает ошибку 405, поэтому, возможно, мне просто нужно настроить приложение для поиска заголовков.   -  person wheresrhys    schedule 27.02.2012
comment
Я думаю, что поддомен не будет работать должным образом, как и идеи.localhost, если вы не отредактируете также файл хоста - 127.0.0.1 ideas.localhost   -  person Bakudan    schedule 27.02.2012
comment
Но есть одна новая странность - два запроса PUT отправляются разными типами моделей на разные URL-адреса, но заголовок ответа Allow различается для обоих ответов. Один установлен на GET HEAD, другой на PUT DELETE, и, насколько я понимаю, нет никаких причин, по которым может быть какая-то разница.   -  person wheresrhys    schedule 27.02.2012
comment
@Bakudan уже сделал, и виртуальный хост отлично работает для GET и POST.   -  person wheresrhys    schedule 27.02.2012


Ответы (1)


Не могу поверить, что я решил проблему менее чем через час после открытия награды, но эй, хо.

Проблема заключалась в том, что Slim не имеет встроенной возможности обработки заголовка X-HTTP-Method-Override, используемого магистралью, а сообщение об ошибке не очень описательно. Добавление следующего в нижней части request.php и использование режима emulateHTTP в Backbone исправили это.

protected function checkForHttpMethodOverride() {
    if ( isset($this->post[self::METHOD_OVERRIDE]) ) {
        $this->method = $this->post[self::METHOD_OVERRIDE];
        unset($this->post[self::METHOD_OVERRIDE]);
        if ( $this->isPut() ) {
            $this->put = $this->post;
        }
    } else if(isset($this->headers['x-method-override'] )) {
        $this->method = $this->headers['x-method-override'];
        if ( $this->isPut() ) {
            $this->put = $this->post;
        }
    }
}

PS: я создал pull request для SLIM, чтобы включить это по умолчанию, поэтому, если вы считаете, что было бы неплохо включить это в структуру, пожалуйста, оставьте комментарий там

person wheresrhys    schedule 26.02.2012