2013-08-13 7 views
8

मैं किसी ऐसे व्यक्ति से प्रोग्राम चला रहा हूं जो असुविधा से मदद मांगता है। कार्यक्रम एक वेबसाइट है। सर्वर एंड पायथन और फ्लास्क (मॉड्यूल, http://flask.pocoo.org/) द्वारा लिखा गया है। कार्यक्रम सर्वर पर सफलतापूर्वक चलाया गया है। मुझे क्या करने की ज़रूरत है उस पर कुछ संशोधित करें। चूंकि उत्पादन सर्वर को परीक्षण के लिए अनुमति नहीं है, इसलिए मैंने इसे फ्लास्क के माध्यम से स्थानीय रूप से विकास सर्वर में परीक्षण किया। हालांकि, मैं मूल कार्यक्रम भी नहीं चला सका। नीचे अजगर से है।sqlalchemy.exc.OperationalError: (OperationalError) डेटाबेस फ़ाइल खोलने में असमर्थ कोई नहीं

(venv)[email protected]:~/python/public_html$ python index.wsgi 

Traceback (most recent call last): File "index.wsgi", line 6, in from app import app as application

File "/home/kevin/python/public_html/app.py", line 27, in <module> 
app = create_app() 

File "/home/kevin/python/public_html/app.py", line 12, in create_app 
database.init_db() 

File "/home/kevin/python/public_html/database.py", line 24, in init_db 
Base.metadata.create_all(engine) 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 2793, in create_all 
    tables=tables) 
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1478, in _run_visitor 
with self._optional_conn_ctx_manager(connection) as conn: 

File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__ 
return self.gen.next() 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1471, in _optional_conn_ctx_manager 
with self.contextual_connect() as conn: 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1661, in contextual_connect 
self.pool.connect(), 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 272, in connect 
return _ConnectionFairy(self).checkout() 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 425, in __init__ 
rec = self._connection_record = pool._do_get() 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 857, in _do_get 
return self._create_connection() 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 225, in _create_connection 
return _ConnectionRecord(self) 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 318, in __init__ 
self.connection = self.__connect() 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 368, in __connect 
connection = self.__pool._creator() 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/strategies.py", line 80, in connect 
return dialect.connect(*cargs, **cparams) 

File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 283, in connect 
return self.dbapi.connect(*cargs, **cparams) 

sqlalchemy.exc.OperationalError: (OperationalError) unable to open database file None None 

config.py फ़ाइल

LOGFILE = '/tmp/ate.log' DEBUG = True TESTING = True THREADED = True DATABASE_URI = 'sqlite:////tmp/ate.db' SECRET_KEY = os.urandom(24)

इसलिए में, मैं एक फ़ोल्डर मेरे उपयोगकर्ता के तहत "tmp" और एक खाली "ate.db" कहा जाता है फ़ाइल बुलाया बनाया। फिर, इसे फिर से चलाया। यह कहा गया है

IOError: [Errno 2] No such file or directory: '/home/kevin/log/ate.log'

फिर, मैंने लॉग फ़ोल्डर और लॉग फ़ाइल बनाई। इसे चलाने के लिए, लेकिन कुछ भी नहीं है अगर यह सफल होता है, वेबसाइट पर http://127.0.0.1:5000/उपलब्ध होना चाहिए की तरह

(venv)[email protected]:~/python/public_html$ python index.wsgi (venv)[email protected]:~/python/public_html$ python index.wsgi (venv)[email protected]:~/python/public_html$

हुआ। हालांकि, यह काम नहीं किया। क्या कोई जानता है कि इसे क्यों हल किया जाए और कैसे हल किया जाए? कोड ठीक होने चाहिए क्योंकि अब यह ऑनलाइन उपलब्ध है। समस्या एक स्थानीय समस्या होनी चाहिए। आपकी मदद के लिए बहुत बहुत धन्यवाद।

जहां कार्यक्रम

from sqlalchemy import create_engine 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import scoped_session, sessionmaker 

engine = None 
db_session = None 
Base = declarative_base() 


def init_engine(uri, **kwards): 
    global engine 
    engine = create_engine(uri, **kwards) 
    return engine 


def init_db(): 
    global db_session 
    db_session = scoped_session(sessionmaker(bind=engine)) 
    # import all modules here that might define models so that 
    # they will be registered properly on the metadata. Otherwise 
    # you will have to import them first before calling init_db() 
    import models 
    Base.metadata.create_all(engine) 
+6

मदद की थी वहाँ 4 '' '//// के बाद करने के लिए है sqlite: 'या सिर्फ 3? इसके अलावा '/ tmp/ate.db' का अर्थ है कि यह'/tmp' में संग्रहीत है और 'tmp' नहीं है। जब तक आप निश्चित रूप से chrooted नहीं हैं। –

+0

इसका मतलब था 4. मुझे लगता है कि यह मेरे स्थानीय पर्यावरण की समस्या है क्योंकि इसे दूसरे कंप्यूटर और सर्वर में चलाया जा सकता है। हालांकि, मुझे नहीं पता कि मुझे अपने लैपटॉप में क्या याद आती है। – user2677756

+0

स्टैक ट्रेस –

उत्तर

1

फंस गया है की कोड मुझे लगता है कि मैं इस जहां फाइल अनुमति .db फ़ाइल या अपनी मूल निर्देशिका के लिए गलत थे की तरह त्रुटियों देखा है। आप यह सुनिश्चित कर सकते हैं कि डेटाबेस तक पहुंचने की प्रक्रिया chown या chmod के उचित उपयोग से ऐसा कर सकती है।

यह Django के बारे में विशेष रूप से है, लेकिन शायद अभी भी प्रासंगिक: https://serverfault.com/questions/57596/why-do-i-get-sqlite-error-unable-to-open-database-file

8

मैं SQLite के साथ इस मुद्दे था। डेटाबेस फ़ाइल को खोलने की कोशिश करने वाली प्रक्रिया को निर्देशिका में लेखन पहुंच की आवश्यकता होती है क्योंकि यह अस्थायी/ताला फ़ाइलों को बनाता है।

निम्न संरचना ने www-data को डेटाबेस का उपयोग करने की अनुमति देने के लिए मेरे लिए काम किया।

%> ls -l 
drwxrwxr-x 2 fmlheureux www-data  4096 Feb 17 13:24 database-dir 

%> ls -l database-dir/ 
-rw-rw-r-- 1 fmlheureux www-data 40960 Feb 17 13:28 database.sqlite 
4

मेरे डेटाबेस यूआरआई //// के बीच में एक डॉट को जोड़ने के बाद कमाल शुरू कर दिया। विंडोज 7 पर काम करना। मुझे कॉल करने से पहले निर्देशिका और डीबी फाइल बनाई गई थी।

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./dbdir/test.db' 
0

मैं बस इसी समस्या से मुलाकात की और पाया कि मैं एक बेवकूफ परिपत्र संदर्भ बना रहा हूं।

./data_model.py

from flask.ext.sqlalchemy import SQLAlchemy 
from api.src.app import app 

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////database/user.db') 

db = SQLAlchemy(app) 

./app.py

... 
from api.src.data_model import db 
db.init_app(app) 

तब मैं app.py/db हटा दिया है और यह काम करता है।

4

बदलें:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////dbdir/test.db' 

के साथ:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///dbdir/test.db' 
3

अंत में यह समझ से बाहर, यद्यपि

import os 

file_path = os.path.abspath(os.getcwd())+"\database.db" 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+file_path 
db = SQLAlchemy(app) 
संबंधित मुद्दे

 संबंधित मुद्दे