CGI

2011-09-06 11 views
8

ile bir Flask uygulamasının dağıtımı Flask çerçevesini kullanarak küçük bir uygulama yazdım. Bunu cgi kullanarak barındırmaya çalışıyorum. Ben belirledik Benim uygulamadaCGI

...

File "/usr/lib/pymodules/python2.7/werkzeug/routing.py", line 1075, in bind_to_environ wsgi_server_name = environ.get('HTTP_HOST', environ['SERVER_NAME'])
KeyError: 'SERVER_NAME'
Status: 500 Internal Server Error
Content-Type: text/plain
Content-Length: 59

: dosya aşağıdaki hatayla sonuçları Running

#!/usr/bin/python 
from wsgiref.handlers import CGIHandler 
from yourapplication import app 

CGIHandler().run(app) 

: dokümantasyon takiben Ben şu içeriğe sahip bir cgi dosyası oluşturduk:

app.config['SERVER_NAME'] = 'localhost:5000' 

Uygulamayı Flask geliştirme sunucusuyla çalıştırdığımda çalışır gayet iyi. Bu şeylere çok yeni olduğumu söyleyebilirim ve benzer hataları olan ancak şanssız başkalarını aradım. Tüm yardımlar takdir edilir.

+1

Bazı http sunucusu altında çalıştırıyor musunuz? Bu ortamlar, cgi'yi çalıştıran http sunucusu tarafından ayarlanmalıdır. – mkriheli

+0

Yorumunuz için teşekkürler. Komutu yerel olarak çalıştırmak için sunucuyu yapılandırmam gerektiğini düşünmemiştim. Gerekli konfigürasyonları yaptıktan sonra tekrar deneyeceğim. – monostop

+0

Bu hatayı düzelttiniz mi? – Shadkhan

cevap

0

Bu, bütünlük uğruna yukarıdaki yorumları izleyen bir cevap olarak yayınlanmıştır. Yukarıda tartışıldığı gibi, cgi betikleri bazı sunucular tarafından yürütülmelidir. İşte soyut from CGI 1.1 RFC var: (eksik ve hata tetiklenen) ortam değişkenleri için

The Common Gateway Interface (CGI) is a simple interface for running external programs, software or gateways under an information server in a platform-independent manner. Currently, the supported information servers are HTTP servers.

sectuib 4.1 RFC görüyoruz.

2

Bu soru üç yaşında ve asla yanıtlanmadı olarak işaretlenmedi. Nasıl yapılacağına dair oldukça kapsamlı bir tartışma arıyorsanız, en son gönderiyi, bana göre, this related stackoverflow question'a gönderin. Senin için çalışmalı.

Kesinlikle mkriheli doğru fikre sahiptir; monostop cgi dosyasını çalıştırmaya çalışmamalıdır (sunucunun gelen bir HTTP isteğine cevap vermesini sağlayın).

+0

Gerçekten, http://stackoverflow.com/a/24848407/2371522 benim için çalıştı. – One

0
Ypatığım ve konak hesabını paylaşan Godaddy yaradığını göstermek için çalışacağız

:

#!/home/USERNAME/.local/bin/python3 
from wsgiref.handlers import CGIHandler 

from sys import path 
path.insert(0, '/home/USERNAME/public_html/MYSITE/') 
from __init__ import app 

class ProxyFix(object): 
    def __init__(self, app): 
     self.app = app 

    def __call__(self, environ, start_response): 
     environ['SERVER_NAME'] = "" 
     environ['SERVER_PORT'] = "80" 
     environ['REQUEST_METHOD'] = "GET" 
     environ['SCRIPT_NAME'] = "" 
     environ['PATH_INFO'] = "/" 
     environ['QUERY_STRING'] = "" 
     environ['SERVER_PROTOCOL'] = "HTTP/1.1" 
     return self.app(environ, start_response) 

if __name__ == '__main__': 
    app.wsgi_app = ProxyFix(app.wsgi_app) 
    CGIHandler().run(app) 
: MySite klasöründe cgi-bin klasöründe

, aşağıdaki cgi dosyası eklendi

MYSITE klasöründe init dosyasını görebileceğiniz gibi flask uygulamasına sahip.

En önemli şey, izinleri doğru olarak ayarlamaktır. "/home/USERNAME/.local/bin/python3" klasörüne AS OLDUĞU GİBİ bu klasöre 755 yerleşti! Flask açmak için sistemin bu izne ihtiyacı olduğunu unutmayın. Birisi sayfanızı girdiğinde

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /home/USERNAME/public_html/MYSITE/cgi-bin/application.cgi/$1 [L] 

Yani cgi dosyası verecek:

Ben MySite klasöründe aşağıdaki .htaccess dosyası var cgi açın.

İlgili konular