2016-06-29 41 views
1

我寫了一個web程序來寫入文件,然後讀取文件,並且失敗了。球拍網頁服務器寫入文件錯誤

而且程序代碼如下:

#lang web-server/insta 

(define (start request) 
    (index-wrap request)) 

(define (index-wrap request) 
    (define (response-generator embed/url) 
    (response/xexpr 
     `(html 
     (head (title "test")) 
     (body 
      (h1 "Test Write") 
      (form ((action ,(embed/url write-handler))) 
        (input ((type "submit")))))))) 

    (define (write-handler request) 
    (call-with-output-file "write_file" 
           #:exists 'truncate 
           (lambda (out) (print "hello,world" out))) 
    (index-wrap request)) 
    (send/suspend/dispatch response-generator)) 

當你按一下按鈕,它會出現一個錯誤:

call-with-output-file: cannot open output file 
path: /usr/share/racket/pkgs/web-server-lib/web-server/default-web-root/htdocs/write_file 
system error: Permission denied; errno=13 

而且我也寫一個測試程序來測試呼叫用輸出文件功能,它寫文件成功。我的測試程序代碼如下:

#lang racket 

(call-with-output-file "write_other" 
          #:exists 'truncate 
          (lambda (out) (print "hello,racket" out))) 

那麼,什麼是關於它的問題?

回答

1

嘗試

(define (write-handler request) 
    (displayln (list "HERE" (current-directory))) 
    (call-with-output-file "write_file" 
           #:exists 'truncate 
           (lambda (out) (print "hello,world" out))) 
    (index-wrap request)) 
    (send/suspend/dispatch response-generator)) 

看到你正在試圖寫的目錄。我懷疑網絡服務器已經改變了目錄,而不是你期望的。

編輯

現在你知道這條道路是

/usr/share/racket/pkgs/web-server-lib/web-server/default-web-root/htdocs/ 

你有兩個選擇。

  1. 更改文件夾
  2. 啓動Web服務器在其他地方的權限

最簡單的是更改權限:

cd /usr/share/racket/pkgs/web-server-lib/web-server/default-web-root/ 
chmod +w htdocs     
sudo chmod +w htdocs  

希望的最後兩行之一工作。如果沒有,你需要 谷歌如何設置文件權限寫入您的操作系統。

+0

路徑是(這裏是/ usr/share/racket/pkgs/web-server-lib/web-server/default-web-root/htdocs /) – huix

+0

如何更改Web服務器寫入的路徑? – huix

+0

@huix我已經添加了一些關於文件權限的信息。 – soegaard