2012-02-23 8 views
5

Tôi đang cố gắng thiết lập một dịch vụ web RESTful trên máy chủ apache localhost của tôi để phục vụ như là back-end cho ứng dụng xương sống của tôi. Tôi đã thử:Thiết lập dịch vụ RESTful cho Backbone.js bằng apache và windows

  1. Thiết lập WebDAV, nhưng nhận được thông báo lỗi sau đây trong các bản ghi

    [Thu ngày 23 tháng 2 21:46:17 2012] [lỗi] [khách hàng 127.0.0.1] Không thể PUT nội dung mới cho/cụm/19. [403, # 0], referer: http://ideas.localhost/ [Thu Feb 23 21:46:17 2012] [lỗi] [client 127.0.0.1] Đã xảy ra lỗi khi mở tài nguyên. [500, # 0], referer: http://ideas.localhost/

  2. Sử dụng Backbone.emulateHTTP, gây ra một 405 method not allowed error (điều mà tôi đoán là do tiêu đề X-HTTP-Method-Override: PUT theo yêu cầu POST bình thường đang làm việc tốt

tôi đang chạy Apache 2.2.21 và PHP 5.3 trên windows 7, và dưới đây là của tôi tập tin .htaccess. tôi cũng đang sử dụng khuôn khổ SLIM để xử lý url định tuyến.

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

và máy chủ cấu hình ảo

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

Tôi đã cố gắng để có được một cái gì đó để làm việc cho các lứa tuổi, vì vậy bất kỳ sự giúp đỡ rất nhiều đánh giá cao.

+0

Bạn đang tạo một tên miền phụ trên localhost? – Bakudan

+0

Có, cấu hình dán trên – wheresrhys

+0

Ngoài ra, và cập nhật - Tôi đã quá bogged xuống với cấu hình máy chủ bằng cách sử dụng web dav rằng khi tôi bật Backbone.emulateHTTP tôi bỏ bê để làm bất kỳ gỡ lỗi thích hợp của PHP. Nó chỉ ra rằng SLIM nhận được yêu cầu và sau đó ném 405 lỗi, vì vậy có lẽ tôi chỉ cần cấu hình ứng dụng để tìm kiếm các tiêu đề. – wheresrhys

Trả lời

4

Không thể tin rằng tôi đã giải quyết được vấn đề ít hơn một giờ sau khi mở một tiền thưởng, nhưng hey ho.

Vấn đề là Slim không có khả năng xử lý tiêu đề X-HTTP-Method-Override được sử dụng bởi xương sống và thông báo lỗi không phải là rất mô tả. Thêm dòng sau ở dưới cùng của request.php và sử dụng emulateHTTP chế độ trong Backbone cố định nó

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 - Tôi đã tạo một pull request cho SLIM để bao gồm này theo mặc định, vì vậy nếu bạn nghĩ rằng nó sẽ là một ý tưởng tốt để bao gồm điều này trong khuôn khổ xin vui lòng để lại một bình luận có