2013-06-20 2 views
1

My Flask 애플리케이션은 매 순간마다 일부 데이터베이스 정보를 업데이트하기 위해 다른 웹 페이지를 긁어 내야합니다. 그래서 저는이 일을하기위한 배경 작업을했지만 불행히도 실제로는 데이터베이스를 수정하지 않고 자동으로 실패한 것으로 보입니다.플라스크 백그라운드 웹 스크 레이 핑 및 데이터베이스 업데이트

나는 다음과 같습니다 데이터베이스 연결이 있습니다

config.py :

class Configuration(object): 
    DATABASE = { 
     'name': 'database.db', 
     'engine': 'peewee.SqliteDatabase', 
     'check_same_thread': False, 
    } 

__ 초기화 __.py :

import flask 
app = flask.Flask(__name__) 
from flask_peewee.db import Database 

app.config.from_object('config.Configuration') 
db = Database(app) 

그리고 나는 읽기/쓰기 데이터베이스 항목 @ app.route() 함수 내에서. 주기적으로/긁어 내 웹 브라우저에 직접 다음

@app.route("/scrape") 
def scrape_update_db(): 
    user = User.get(id=5) 
    user.value += 1 
    user.save() 
    return "Done" 

과 : 내가 좋아하는, 내 의견의 나머지를 넣어 때

from myapp import * 
db.connect_db() 
while True: 
    #scrape and update the database with commands similar to: 
    user = User.get(id=5) 
    user.value += 1 
    user.save() 

코드는 작동 : 여기 scrape.py 배경 작업은입니다. 그래서 매분마다 http://localhost:80/scrape에 연결하는 백그라운드 작업을 할 수있었습니다. 그러나 이것은 오히려 복잡하게 보입니다. 그리고 나는 그것이 (서버가 약한 하드웨어에서 실행 중이다) 계산 상 효율적이지 않을 것이라고 상상합니다.

백그라운드에서 데이터베이스 항목을 어떻게 업데이트 할 수 있습니까?

답변

1

내 응용 프로그램에 데이터베이스가 비어있는 경우 자동으로 데이터베이스/테이블을 만드는 코드가 포함되어 있습니다. 아파치/WSGI는 배경 작업자를 실행하고있는 것과 다른 작업 디렉토리에서 Flask 애플리케이션을 실행하고 있었다. 이는 작업자 애플리케이션이 자체 데이터베이스를 생성하여 두 애플리케이션이 실제로 별도의 데이터베이스로 작업하게 만들었다.

따라서 해결책은 각각이 동일한 디렉토리에서 실행되는지 확인하는 것입니다.

관련 문제