2012-02-23 4 views
5

Sto provando a configurare un servizio web RESTful sul mio apache localhost per fungere da back-end per la mia app backbone. Ho provato:Impostazione di un servizio RESTful per Backbone.js con apache e windows

  1. Configurazione di WebDAV, ma ottenere i seguenti messaggi di errore nei registri

    [Gio 23 Feb 2012 21:46:17] [errore] [client 127.0.0.1] Impossibile Metti nuovi contenuti per/cluster/19. [403, # 0], referente: http://ideas.localhost/ [Gio Feb 23 21:46:17 2012] [errore] [client 127.0.0.1] Si è verificato un errore durante l'apertura di una risorsa. [500, # 0], referer: http://ideas.localhost/

  2. Utilizzando Backbone.emulateHTTP, che provoca una 405 method not allowed error (cosa che immagino è causato dalla X-HTTP-Method-Override: PUT intestazione come normali richieste POST stanno lavorando bene

I' sto correndo Apache 2.2.21 e PHP 5.3 a Windows 7, e sotto è il mio file .htaccess. sto anche utilizzando il framework SLIM per gestire URL routing.

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

e config host virtuale

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

Ho lottato per ottenere qualcosa a lavorare per anni, quindi qualsiasi aiuto notevolmente apprezzato.

+0

Stai facendo un sottodominio su localhost? – Bakudan

+0

Sì, configurazione incollata sopra – wheresrhys

+0

Inoltre, e aggiornamento - Sono diventato così impantanato con la configurazione del server utilizzando web dav che quando ho attivato Backbone.emulateHTTP ho trascurato di fare il debug corretto di PHP. Si scopre che SLIM sta ricevendo la richiesta e poi lancia l'errore 405, quindi forse ho solo bisogno di configurare l'app per cercare le intestazioni. – wheresrhys

risposta

4

Non posso credere di aver risolto il problema meno di un'ora dopo aver aperto una taglia, ma hey ho.

Il problema era che Slim non ha una capacità integrata di gestire l'intestazione X-HTTP-Method-Override utilizzata dal backbone e il messaggio di errore non è molto descrittivo. L'aggiunta dei seguenti in fondo request.php e utilizzare la modalità in emulateHTTP Backbone risolto

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 - Ho creato un pull request per SLIM per includere questo di default, quindi se si pensa che sarebbe una buona idea per includere questo nella struttura si prega di lasciare un commento lì

Problemi correlati