Найти - Пользователи
Полная версия: flask+sqlalchemy+firebird не работает через apache
Начало » Web » flask+sqlalchemy+firebird не работает через apache
1
agaspher
День добрый!
Возможно кто-то сможет объяснить почему происходит следующее:
win7x64+Python2.7+Flask0.10.1+flask_sqlalchemy1.0+firebird2.1+kinterbasedb

from flask import Flask,  render_template
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.debug = True
app.config.from_object(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'firebird+kinterbasdb://sysdba:masterkey@server:3050/d:/base.fdb'
fdb = SQLAlchemy(app)
class Discount(fdb.Model):
    name = fdb.Column(fdb.String(40))
@app.route('/discount')
def show_discount():
    names = Discount.query.all()
    return render_template('show_discount.html', names=names)

на встроенном сервере все отлично, данные приезжают, но если через apache2.2 mod_wsgi то вываливается ошибка:

Traceback (most recent call last):
File "C:/Apache2.2/wsgi_scripts/discount.wsgi", line 10, in <module>
from discount import app as application
File "c:/apache2.2/cgi-bin/discount\\discount.py", line 30, in <module>
discs = Disccli.query.limit(30)
File "C:\\Python27\\lib\\site-packages\\flask_sqlalchemy-1.0-py2.7.egg\\flask_sqlalchemy\\__init__.py", line 428, in __get__
return type.query_class(mapper, session=self.sa.session())
File "build\\bdist.win32\\egg\\sqlalchemy\\orm\\scoping.py", line 70, in __call__
return self.registry()
File "build\\bdist.win32\\egg\\sqlalchemy\\util\\_collections.py", line 903, in __call__
return self.registry.setdefault(key, self.createfunc())
File "C:\\Python27\\lib\\site-packages\\flask_sqlalchemy-1.0-py2.7.egg\\flask_sqlalchemy\\__init__.py", line 139, in __init__
bind=db.engine,
File "C:\\Python27\\lib\\site-packages\\flask_sqlalchemy-1.0-py2.7.egg\\flask_sqlalchemy\\__init__.py", line 780, in engine
return self.get_engine(self.get_app())
File "C:\\Python27\\lib\\site-packages\\flask_sqlalchemy-1.0-py2.7.egg\\flask_sqlalchemy\\__init__.py", line 797, in get_engine
return connector.get_engine()
File "C:\\Python27\\lib\\site-packages\\flask_sqlalchemy-1.0-py2.7.egg\\flask_sqlalchemy\\__init__.py", line 473, in get_engine
self._engine = rv = sqlalchemy.create_engine(info, **options)
File "build\\bdist.win32\\egg\\sqlalchemy\\engine\\__init__.py", line 335, in create_engine
return strategy.create(*args, **kwargs)
File "build\\bdist.win32\\egg\\sqlalchemy\\engine\\strategies.py", line 73, in create
dbapi = dialect_cls.dbapi(**dbapi_args)
File "build\\bdist.win32\\egg\\sqlalchemy\\dialects\\firebird\\kinterbasdb.py", line 101, in dbapi
return __import__('kinterbasdb')
File "C:\\Python27\\lib\\site-packages\\kinterbasdb\\__init__.py", line 119, in <module>
import _kinterbasdb as _k
ImportError: DLL load failed: \xcf\xf0\xee\xe8\xe7\xee\xf8\xe5\xeb \xf1\xe1\xee\xe9 \xe2 \xef\xf0\xee\xe3\xf0\xe0\xec\xec\xe5 \xe8\xed\xe8\xf6\xe8\xe0\xeb\xe8\xe7\xe0\xf6\xe8\xe8 \xe1\xe8\xe1\xeb\xe8\xee\xf2\xe5\xea\xe8 \xe4\xe8\xed\xe0\xec\xe8\xf7\xe5\xf1\xea\xee\xe9 \xea\xee\xec\xef\xee\xed\xee\xe2\xea\xe8 (DLL).
PooH
Рискну предположить что разрядности apache и fbclient.dll разные.
agaspher
нет, разрядность одинаковая, апачь httpd-2.2.25-win32-x86-no_ssl.msi, и приложение, для которого пишу, так скажем, плагин, не работает с firebird x64, нет udf для него, поэтому firebird тоже x32
PooH
Тогда следующее, что я бы проверил: пути к DLL и права. Но про виндоус я плохой советчик
agaspher
пути и права - это первое, что пришло мне в голову, fbclient.dll позакидывал уже куда только можно, сейчас на ubuntu хочу проверить, какой эффект будет у этой связки, правда даже если заработает надо будет что-то думать, ибо прога только под винду
agaspher
попробовал на убунте, результат тот же, ошибка kinterbasdb при импорте, пришлось использовать fdb, отказавшись от поддержки старых версий, работающих с interbase 7.5
agaspher
история получила продолжение, возникла такая же проблема с lxml, решил разобраться до конца, на винде помогло следующее:

- скачал windows sdk 7.1 (у меня не ставился, пока я не удалил VC++ 2010)
- в консоли:

mt -inputresource:“c:\python27\python.exe”;#1 -out:“c:\python27\extracted.python.exe.manifest”

- в файле extracted.python.exe.manifest удалил секцию <trustInfo>
- перенес файлик в директорию apache и переименовал в httpd.exe.manifest
- при остановленом apache в консоли:

mt -manifest “c:\apache22\bin\httpd.exe.manifest” -outputresource:“c:\apache22\bin\httpd.exe”;#1

после этого проблема исчезла, и с kinterbasdb и с lxml
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB