2012-02-23 9 views
5

Próbuję skonfigurować usługę WWW RESTful na moim lokalnym serwerze apache, aby służyć jako back-end dla mojej aplikacji szkieletowej. Próbowałem:Konfigurowanie usługi RESTful dla pliku Backbone.js z apache i windows

  1. Konfiguracja WebDAV, ale się następujące komunikaty o błędach w logach

    [czw 23 lutego 2012 21:46:17] [error] [client 127.0.0.1] Nie można PUT nowe treści dla/clusters/19. [403, # 0], odsyła: http://ideas.localhost/ [Czw 23 lutego 21:46:17 2012] [błąd] [klient 127.0.0.1] Wystąpił błąd podczas otwierania zasobu. [500, # 0] referer: http://ideas.localhost/

  2. Korzystanie Backbone.emulateHTTP, co powoduje 405 method not allowed error (Chyba coś jest spowodowane nagłówku X-HTTP-Method-Override: PUT jako normalnych żądań POST pracują dobrze

I m Apache 2.2.21 i PHP 5.3 na Windows 7 i poniżej jest mój plik .htaccess. Używam również Slim ramy do obsługi url routingu.

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

i virtual config gospodarz

<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> 

Od wielu lat staram się znaleźć coś do roboty, więc każda pomoc bardzo się przydała.

+0

Czy robisz subdomeny na localhost? – Bakudan

+0

Tak, config wklejony powyżej – wheresrhys

+0

Ponadto, i aktualizacja - utknąłem z konfiguracją serwera przy użyciu web dav, że gdy włączyłem Backbone.emulateHTTP, zaniedbałem wykonanie właściwego debugowania PHP. Okazuje się, że SLIM otrzymuje żądanie, a następnie rzuca błąd 405, więc może po prostu muszę skonfigurować aplikację, aby wyszukać nagłówki. – wheresrhys

Odpowiedz

4

Nie mogę uwierzyć, że rozwiązałem problem mniej niż godzinę po otwarciu nagrody, ale hej, ho.

Problem polegał na tym, że Slim nie ma wbudowanej możliwości obsługi nagłówka X-HTTP-Method-Override używanego przez szkielet, a komunikat o błędzie jest mało opisowy. Dodanie następujących u dołu request.php i korzystania emulateHTTP tryb w Backbone naprawił

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 - Utworzyłem pull request dla SLIM obejmuje to domyślnie, więc jeśli myślisz, że to będzie dobry pomysł na włączenie tego w ramy proszę zostawić komentarz