การตอบสนองจากแอปพลิเคชัน WSGI ได้รับการดาวน์โหลดในเบราว์เซอร์แทนที่จะแสดง

ฉันกำลังพยายามโฮสต์แอปพลิเคชัน WSGI (เขียนด้วย webpy โฮสต์บน Apache) บนเซิร์ฟเวอร์ Ubuntu เมื่อใดก็ตามที่ฉันเรียกใช้แอปพลิเคชัน การตอบสนอง JSON จะถูกดาวน์โหลดแทนที่จะแสดงในเบราว์เซอร์ แอปพลิเคชันเดียวกันนี้ทำงานได้ดีบน localhost นี่คือโค้ดของแอปพลิเคชัน WSGI (นำมาจาก http://library.linode.com/frameworks/webpy/ubuntu-10.04-lucid) -

import web
import os
import sys
app_path = os.path.dirname(__file__)
sys.path.append(app_path)
os.chdir(app_path)
urls = ('/(.*)', 'hello')

web.debug = False # You may wish to place this in a config file
app = web.application(urls, globals(), autoreload=False)
application = app.wsgifunc() # needed for running with apache as wsgi

class hello:        
    def GET(self, name):
          if not name: 
               name = 'World'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
     app.run()     

การตั้งค่าการกำหนดค่า Apache ของฉันคือ -

WSGIScriptAlias /project /var/www/mywebsite.com/htdocs/project/main.py
<Directory /var/www/mywebsite.com/htdocs/project>
    Order deny,allow
    Allow from all
    SetHandler wsgi-script
    Options ExecCGI
</Directory>   

เมื่อมาจากเบราว์เซอร์ ฉันจะไปที่ www.mywebsite.com/project/ จากนั้นจะมีไฟล์ที่มีข้อความ "Hello, World!" เขียนไว้ในนั้นจะถูกดาวน์โหลด

อย่างไรก็ตาม เมื่อฉันไปที่ www.mywebsite.com/project ฉันได้รับข้อความ "ไม่พบ"


person anu.agg    schedule 25.01.2012    source แหล่งที่มา


คำตอบ (1)


เกี่ยวกับปัญหา Not Found ฉันคิดว่าความจริงที่ว่าการแมป URL เริ่มต้นด้วยเครื่องหมายทับบังคับให้ใช้เครื่องหมายทับหลังเส้นทางที่ระบุในรายการ WSGIScriptAlis ใน apache conf

เนื่องจากแอป wsgi จะพยายามค้นหา URL ที่ว่างเปล่าโดยสมบูรณ์หากไม่มีการใช้เครื่องหมายทับใน URL สิ่งนี้สามารถแก้ไขได้สองวิธี สำหรับการทดสอบครั้งแรก คุณสามารถเปลี่ยนแมป URL เป็นได้

urls = ('(.*)', 'hello')

หรือคุณสามารถใช้ mod_Rewrite เพื่อต่อท้ายเครื่องหมายทับหลังเส้นทางได้ ดูที่นี่ เพิ่ม Trailing Slash ไปยัง URL

เกี่ยวกับไฟล์ที่กำลังดาวน์โหลดแทนที่จะแสดงในเบราว์เซอร์ ฉันขอแนะนำให้คุณสามารถใช้เครื่องมือแก้ไขจุดบกพร่องของเบราว์เซอร์ เช่น firebug หรือเครื่องมือสำหรับนักพัฒนา Chrome เพื่อตรวจสอบว่าประเภทเนื้อหาของการส่งคืน 'hello world' คืออะไร ควรมีวิธีใน web.py เพื่อตั้งค่าประเภทเนื้อหา ดูที่นี่สำหรับวิธีการตั้งค่าประเภทเนื้อหา webpy: วิธีให้บริการ JSON

หวังว่าบางส่วนจะช่วยได้

person olly_uk    schedule 25.01.2012
comment
ขอบคุณ olly_uk วิธีนี้จะช่วยแก้ปัญหาทั้งสองอย่าง แย่เลย แทนที่จะส่งคืนออบเจ็กต์ json ฉันกลับคืนสตริงเพราะมันไม่แสดงในเบราว์เซอร์ - person anu.agg; 25.01.2012
comment
ขอบคุณ ไม่มีปัญหา แค่ตรวจสอบว่าคุณไม่ต้องการความช่วยเหลืออีกต่อไป :-) - person olly_uk; 06.03.2012