Ошибки в программе
5 years 6 months ago #1982
by StalkerSVR
StalkerSVR created the topic: Ошибки в программе
Огромное спасибо за такую нужную программу!
Теперь о неприятном - об ошибках и глюках. Развернул на линуксе и прикрутил к Апачу. При работе под встроенным веб-сервером все было хорошо, а после переноса под апач (или что-то еще доставил на сервер, не уследил этот момент) появились следующие проблемы:
1) при загрузке файлов, которые лежат на диске в каталоге с кириллическими именами (например лежит файл военное дело.zip, внутри которого куча разных книжек) возникает ругань python на ошибку энкодинга. Вылечил добавлением в файл dl.py строчек .encode("utf8")2) в качестве читалки использую клиента Tucan Reader и Coffee Reader под Windows Phone. Тут возникли проблемы, Coffee Reader совсем не реагирует на ссылки и не хочет работать с данным сервером, а Tucan Reader работает, но с одним неприятным исключением - если открывать книгу из выбора по авторам/жанрам/названию, то все работает. А если открывать из выбора "каталоги", доходя до нужного файла, то не может её скачать. Почему не понимаю, руками по выводимой ссылке все скачивается, в логах Апача тоже идет обычное обращение к файлу. Причем, в самый первый момент, когда только развернул программу и работал с внутренним сервером, то файлы отдавались. А сейчас пробовал опять пустить внутренний сервер, и с него тоже не качается.
3) Предложение по обработке inpx файлов. Сейчас если его обрабатывать, то в библиотеке не будет хватать описания книг и картинок. Есть предложение ориентироваться на файл inpx на предмет наличия нужных книг, но пересканировать и сами книги, дабы получить описания и картинки. Помнится в дискуссиях на рутрекере в темах по выкладыванию библиотеки либрусек упоминалась разница в количестве книг при прямом сканировании и при работе с файлом inpx, дескать лучше ориентироваться на записи в нем, там более упорядочено все.
Теперь о неприятном - об ошибках и глюках. Развернул на линуксе и прикрутил к Апачу. При работе под встроенным веб-сервером все было хорошо, а после переноса под апач (или что-то еще доставил на сервер, не уследил этот момент) появились следующие проблемы:
1) при загрузке файлов, которые лежат на диске в каталоге с кириллическими именами (например лежит файл военное дело.zip, внутри которого куча разных книжек) возникает ругань python на ошибку энкодинга. Вылечил добавлением в файл dl.py строчек .encode("utf8")
--- dl.py.bak 2017-11-04 23:32:24.256065562 +0300
+++ dl.py 2017-11-05 21:52:56.090929368 +0300
@@ -58,15 +58,15 @@
book_size = book.filesize
if book.cat_type==opdsdb.CAT_NORMAL:
file_path=os.path.join(full_path, book.filename)
- book_size=os.path.getsize(file_path)
+ book_size=os.path.getsize(file_path.encode("utf8"))
try:
- fo=codecs.open(file_path, "rb")
+ fo=codecs.open(file_path.encode("utf8"), "rb")
except FileNotFoundError:
raise Http404
s=fo.read()
elif book.cat_type in [opdsdb.CAT_ZIP, opdsdb.CAT_INP]:
try:
- fz=codecs.open(full_path, "rb")
+ fz=codecs.open(full_path.encode("utf8"), "rb")
except FileNotFoundError:
raise Http404
z = zipfile.ZipFile(fz, 'r', allowZip64=True)
@@ -107,13 +107,13 @@
try:
if book.cat_type == opdsdb.CAT_NORMAL:
file_path = os.path.join(full_path, book.filename)
- fo = codecs.open(file_path, "rb")
+ fo = codecs.open(file_path.encode("utf8"), "rb")
book_data = create_bookfile(fo,book.filename)
image = book_data.extract_cover_memory()
#fb2.parse(fo, 0)
fo.close()
elif book.cat_type in [opdsdb.CAT_ZIP, opdsdb.CAT_INP]:
- fz = codecs.open(full_path, "rb")
+ fz = codecs.open(full_path.encode("utf8"), "rb")
z = zipfile.ZipFile(fz, 'r', allowZip64=True)
fo = z.open(book.filename)
book_data = create_bookfile(fo, book.filename)
@@ -164,11 +164,11 @@
fb2=fb2parse.fb2parser(1)
if book.cat_type==opdsdb.CAT_NORMAL:
file_path=os.path.join(full_path,book.filename)
- fo=codecs.open(file_path, "rb")
+ fo=codecs.open(file_path.encode("utf8"), "rb")
fb2.parse(fo,0)
fo.close()
elif book.cat_type in [opdsdb.CAT_ZIP, opdsdb.CAT_INP]:
- fz=codecs.open(full_path, "rb")
+ fz=codecs.open(full_path.encode("utf8"), "rb")
z = zipfile.ZipFile(fz, 'r', allowZip64=True)
fo = z.open(book.filename)
fb2.parse(fo,0)
@@ -247,7 +247,7 @@
file_path=os.path.join(full_path, book.filename)
elif book.cat_type in [opdsdb.CAT_ZIP, opdsdb.CAT_INP]:
try:
- fz=codecs.open(full_path, "rb")
+ fz=codecs.open(full_path.encode("utf8"), "rb")
except FileNotFoundError:
raise Http404
z = zipfile.ZipFile(fz, 'r', allowZip64=True)
@@ -261,8 +261,8 @@
#proc = subprocess.Popen((converter_path.encode('utf8'),file_path.encode('utf8'),tmp_conv_path.encode('utf8')), shell=True, stdout=subprocess.PIPE)
out = proc.stdout.readlines()
- if os.path.isfile(tmp_conv_path):
- fo=codecs.open(tmp_conv_path, "rb")
+ if os.path.isfile(tmp_conv_path.encode("utf8")):
+ fo=codecs.open(tmp_conv_path.encode("utf8"), "rb")
s=fo.read()
# HTTP Header
response = HttpResponse()
3) Предложение по обработке inpx файлов. Сейчас если его обрабатывать, то в библиотеке не будет хватать описания книг и картинок. Есть предложение ориентироваться на файл inpx на предмет наличия нужных книг, но пересканировать и сами книги, дабы получить описания и картинки. Помнится в дискуссиях на рутрекере в темах по выкладыванию библиотеки либрусек упоминалась разница в количестве книг при прямом сканировании и при работе с файлом inpx, дескать лучше ориентироваться на записи в нем, там более упорядочено все.
Please Войти or Create an account to join the conversation.
- StalkerSVR
-
Topic Author
- Offline
- Новый участник
-
Less
More
- Posts: 2
5 years 6 months ago - 5 years 6 months ago #1983
by mitshel
mitshel replied the topic: Ошибки в программе
Спасибо за отчет. 1) Возможно неверная настройка Apache, хотелось бы увидеть логи ошибок, настройки Apache и т.д. вместо обтекаемого "ругань", и еще поищите по форуму про настройку файла /etc/sysconfig/httpd.
2) Однако неясно что за проблема с Windows Phone - не владею таким аппаратом, поэтому хотелось бы получить более подробную информацию.
3) Зачем сканировать INPX, а затем пересканировать коллекцию - просто отключите INPX и все.
Да и еще: если все хорошо работало со встроенным сервером, а под Апачем есть проблемы - о скорее всего проблемы неверной настройке Apache либо прав доступа к файлам. Кроме того для того чтобы действительно помочь исправить найденные ошибки, прошу вас прислать более полную информацию по каждому пункту (в какой системе запускаете - название, версия/версия apache/настройки apache/логи возникающих ошибок)
2) Однако неясно что за проблема с Windows Phone - не владею таким аппаратом, поэтому хотелось бы получить более подробную информацию.
3) Зачем сканировать INPX, а затем пересканировать коллекцию - просто отключите INPX и все.
Да и еще: если все хорошо работало со встроенным сервером, а под Апачем есть проблемы - о скорее всего проблемы неверной настройке Apache либо прав доступа к файлам. Кроме того для того чтобы действительно помочь исправить найденные ошибки, прошу вас прислать более полную информацию по каждому пункту (в какой системе запускаете - название, версия/версия apache/настройки apache/логи возникающих ошибок)
Last Edit: 5 years 6 months ago by mitshel.
Please Войти or Create an account to join the conversation.
- mitshel
-
- Offline
- Администратор
-
Less
More
- Posts: 297
- Karma: 8
5 years 6 months ago #1984
by StalkerSVR
StalkerSVR replied the topic: Ошибки в программе
Ошибка была такого плана
UnicodeEncodeError at /opds/download/775379/0/
'ascii' codec can't encode characters in position 14-19: ordinal not in range(128)
Request Method:
GET
Request URL:
http://*****.ddns.net/opds/download/775379/0/
Django Version:
1.11.7
Exception Type:
UnicodeEncodeError
Exception Value:
'ascii' codec can't encode characters in position 14-19: ordinal not in range(128)
Exception Location:
/usr/lib/python3.6/codecs.py in open, line 895
Python Executable:
/usr/bin/python3
Python Version:
3.6.3
Python Path:
['/opt/sopds',
'/usr/lib/python36.zip',
'/usr/lib/python3.6',
'/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages',
'/usr/lib/python3/dist-packages',
'/usr/lib/python3.6/dist-packages']
Server time:
Пн, 6 Ноя 2017 21:50:08 +0300
Настройки Апача брал тут на форуме
версия системы:
Linux hserv 4.13.0-1-amd64 #1 SMP Debian 4.13.4-2 (2017-10-15) x86_64 GNU/Linux
Server version: Apache/2.4.29 (Debian)
Server built: 2017-10-23T14:46:55
Python 3.6.3
версия sopds - 0.43
про проблемы с телефонными читалками пока разбираюсь, ни одна из трех имеющихся не хочет полностью работать. Нашел даже онлайн валидатор - opds-validator.appspot.com/ который на возвращаемые данные слегка ругается. Но думаю, что проблема в чем-то другом... Пока пытаюсь разобраться, ибо нигде нет ошибок, но читалка именно из каталога не хочет показывать файлы.
UnicodeEncodeError at /opds/download/775379/0/
'ascii' codec can't encode characters in position 14-19: ordinal not in range(128)
Request Method:
GET
Request URL:
http://*****.ddns.net/opds/download/775379/0/
Django Version:
1.11.7
Exception Type:
UnicodeEncodeError
Exception Value:
'ascii' codec can't encode characters in position 14-19: ordinal not in range(128)
Exception Location:
/usr/lib/python3.6/codecs.py in open, line 895
Python Executable:
/usr/bin/python3
Python Version:
3.6.3
Python Path:
['/opt/sopds',
'/usr/lib/python36.zip',
'/usr/lib/python3.6',
'/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages',
'/usr/lib/python3/dist-packages',
'/usr/lib/python3.6/dist-packages']
Server time:
Пн, 6 Ноя 2017 21:50:08 +0300
Environment:
Request Method: GET
Request URL: http://stalkersvr.ddns.net/opds/download/775379/0/
Django Version: 1.11.7
Python Version: 3.6.3
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'opds_catalog',
'sopds_web_backend',
'django.contrib.admin',
'django.contrib.staticfiles',
'constance.backends.database',
'constance']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'opds_catalog.middleware.SOPDSLocaleMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _legacy_get_response
249. response = self._get_response(request)
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/sopds/opds_catalog/dl.py" in Download
69. fz=codecs.open(full_path, "rb")
File "/usr/lib/python3.6/codecs.py" in open
895. file = builtins.open(filename, mode, buffering)
Exception Type: UnicodeEncodeError at /opds/download/775379/0/
Exception Value: 'ascii' codec can't encode characters in position 14-19: ordinal not in range(128)
Настройки Апача брал тут на форуме
WSGIPythonPath /opt/sopds/
<VirtualHost _default_:80>
ServerAdmin webmaster@localhost
ServerName sopds-apache.example.com
WSGIScriptAlias / /opt/sopds/sopds/wsgi.py
WSGIDaemonProcess sopds processes=2 threads=15 python-path=/opt/sopds/
WSGIProcessGroup sopds
WSGIScriptReloading On
WSGIPassAuthorization On
<Directory "/opt/sopds/sopds/">
Require all granted
</Directory>
<Directory "/opt/sopds/static/">
Require all granted
</Directory>
Alias /static "/opt/sopds/static"
</VirtualHost>
версия системы:
Linux hserv 4.13.0-1-amd64 #1 SMP Debian 4.13.4-2 (2017-10-15) x86_64 GNU/Linux
Server version: Apache/2.4.29 (Debian)
Server built: 2017-10-23T14:46:55
Python 3.6.3
версия sopds - 0.43
про проблемы с телефонными читалками пока разбираюсь, ни одна из трех имеющихся не хочет полностью работать. Нашел даже онлайн валидатор - opds-validator.appspot.com/ который на возвращаемые данные слегка ругается. Но думаю, что проблема в чем-то другом... Пока пытаюсь разобраться, ибо нигде нет ошибок, но читалка именно из каталога не хочет показывать файлы.
Please Войти or Create an account to join the conversation.
- StalkerSVR
-
Topic Author
- Offline
- Новый участник
-
Less
More
- Posts: 2
Time to create page: 0.109 seconds