.cgi проблема с веб-сервером - PullRequest
1 голос
/ 07 марта 2009

код

#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html"
print 
print "<html><head><title>Books</title></head>"
print "<body>" print "<h1>Books</h1>" 
print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db') cursor = connection.cursor() cursor.execute(“SELECT name FROM books ORDER BY pub_date DESC LIMIT 10”)

for row in cursor.fetchall():
    print "<li>%s</li>" % row[0]

print "</ul>" 
print "</body></html>"

connection.close()

Я сохранил его как test.cgi на свой веб-сервер. Я запускаю его по www.mysite.com/test.cgi безуспешно

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Как решить проблему?

[править] после первого ответа

  1. test.cgi - исполняемый файл (я запускаю $ chmod + x test.cgi)
  2. Я использую Apache.
  3. У меня есть это в .bashrc export PATH = $ {PATH}: ~ / bin
  4. Python-модуль MySQLdb установлен.
  5. Код не имеет умных кавычек.

[править] после второго ответа

вы получаете эту ошибку, потому что вы не установил модуль MySQLdb что Python должен общаться с MySQL базы данных

Я установил MySQLdb в свою систему. Модуль работает, так как я могу их импортировать. Тем не менее, я все еще получаю ту же ошибку, когда я иду на www. [Mysite] .com / test.cgi.

[править]

Я не уверен насчет вопросов

Параметры connect () верны? MySQL работает на localhost на порт по умолчанию?

Я запускаю MySQL на моем сервере. Актуален ли здесь вопрос о параметрах connect ()?

Правильно ли выражение SELECT?

Вы имеете в виду, правильны ли мои операторы SQL, такие как оператор SELECT? Я еще не использовал никаких SQL-запросов. Они нужны мне здесь?

Ответы [ 4 ]

2 голосов
/ 07 марта 2009

Любое количество проблем может вызвать ошибку, которую вы видите:

  1. Является ли test.cgi исполняемым (chmod 755) на сервере?
  2. Является ли каталог, в который вы поместили test.cgi, обозначенным как ScriptAlias ​​ расположение или у которого включена опция ExecCGI (или эквивалент, если вы не используете Apache)?
  3. python в системе PATH или PATH в среде запуска веб-сервера?
  4. Установлена ​​ли библиотека MySQLdb Python?
  5. Правильны ли параметры connect()? MySQL работает на localhost через порт по умолчанию?
  6. Правильно ли выражение SELECT?

Если вы уверены, что python найден (протестируйте его с помощью простейшего сценария или, если сможете, войдя на веб-сервер и набрав which python), вы можете получить намного лучший результат отладки, добавив следующее в верхняя часть вашего сценария чуть ниже шебанга:

import cgitb
cgitb.enable()

Подробнее: http://docs.python.org/library/cgitb.html

Кроме того, если у вас есть доступ оболочки к веб-серверу, попробуйте запустить python и просто наберите:

>>> import MySQLdb

Если команда возвращается без ошибок, у вас есть ответ для # 4 выше. Если выдается сообщение об ошибке, вам необходимо установить MySQLdb в установку Python веб-сервера.

РЕДАКТИРОВАТЬ: Если присмотреться к началу вашего вопроса, я вижу, что код был взят из иллюстративного примера в самом начале Книги Джанго. Таким образом, я мог бы расширить № 5 выше, чтобы включить предупреждение о том, что, конечно, необходимая база данных, таблицы, пользователь и разрешения должны быть настроены при установке MySQL, доступной для веб-сервера.

2 голосов
/ 07 марта 2009

Я немного прибрался в коде, вставив при необходимости разрывы строк и заменив умные кавычки на " и '. У вас есть еще удача со следующим? Можете ли вы запустить его из терминала, просто набрав python test.cgi?

#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html"
print
print "<html><head><title>Books</title></head>"
print "<body>"
print "<h1>Books</h1>"
print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")

for row in cursor.fetchall():
    print "<li>%s</li>" % row[0]

print "</ul>"
print "</body></html>"

connection.close()
1 голос
/ 07 марта 2009

Ошибка в http://dpaste.com/8866/ возникает из-за того, что вы используете «фигурные кавычки» вместо стандартных кавычек ASCII.

Вы захотите заменить «и» на «. Просто используйте поиск и замену в текстовом редакторе.

0 голосов
/ 07 марта 2009

Убедитесь, что вы сохраняете файл с правильными окончаниями строк. то есть LF только в Unix или CR / LF для Windows. У меня совсем недавно была точно такая же проблема ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...