2015-11-27 68 views
-1

所以我一直被這個問題困住了一天。我對AWS EC2比較陌生,所以一直在嘗試使用Python Flask應用程序。在AWS EC2上的Apache燒瓶 - 讀/寫失敗

我有一個Ubuntu實例,並且可以使用Apache2和WSGI獲得燒瓶應用程序以正常運行它。唯一的問題是每當我在我的應用程序中放入一行代碼,請求在文件系統上讀取或寫入服務器錯誤時,但錯誤日誌不會產生錯誤。

這裏的一些調試輸出的錯誤該網站的功能:

def cleanup_temps(): 
    basePath = os.path.dirname(os.path.realpath('__file__')) + '/static/images/temp/' 
    deleteDelay = 20 
    print '1' 
    for f in os.listdir(basePath): 
     print '2' 
     if os.path.getctime(basePath + f) < (time.time() - deleteDelay): 
      print '3' 
      os.remove(basePath + f) 

當我打開調用該函數,它只是給了我一個內部服務器錯誤的頁面,並檢查/var/log/apache2/error.log出現的唯一線路調試打印'1'。 奇怪的是,如果我在本地運行該服務器,它工作正常。即使我通過python shell在EC2實例上手動運行該函數,它仍然可以正常工作。所以我認爲這可能與Apache或WSGI權限有關?

我已經將整個燒瓶站點更改爲chmod -R 777,並將root用戶:組從root:root更改爲ubuntu:ubuntu,但是這似乎並沒有改變?

我現在有點空白,說實話,所以不知道我還能嘗試什麼?

良好的措施,這裏是我/etc/apache2/sites-available/ImgResizeApi.conf文件:

<VirtualHost *:80> 
     WSGIDaemonProcess ImgResizeApi 
    WSGIScriptAlias//var/www/ImgResizeApi/ImgResizeApi.wsgi 

    <Directory /var/www/ImgResizeApi> 
      WSGIProcessGroup ImgResizeApi 
     WSGIApplicationGroup %{GLOBAL} 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

編輯:我敢肯定它現在是與權限,因爲我做了一個更簡單的測試,將下面的功能,儘快因爲3個文件IO行添加錯誤的服務器!

@ImgResizeApi.route('/test') 
def test(): 
     f = open('test.txt', 'w') 
     f.write('Hi there') 
     f.close() 
     return render_template('index.html') 

回答

1

在吃東西時我的眼睛是'__ file __'在引號中。 它是一個特殊的變量,而不是一個字符串。不應該引用它。

您可能需要首先打印basePath變量以查看返回的實際路徑。

此外,對於跨平臺兼容性,您可能希望使用os.path.sep而不是'/'以及路徑串聯使用os.path.join而不是簡單字符串concat。

0

可能與此question有關,編輯部分的解決方案是將相對路徑轉換爲絕對路徑。我不知道EC2上的程序是如何啓動的,但看起來工作目錄位於某個Python /庫目錄內,而實際程序不允許寫入。 修正看起來可能如此:

@ImgResizeApi.route('/test') 
def test(): 
     f = open('/tmp/test.txt', 'w') 
     f.write('Hi there') 
     f.close() 
     return render_template('index.html')