Rq: ImportError: project.controllers.leads_fbλΌλŠ” λͺ¨λ“ˆμ΄ μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 03μ›” 23일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: rq/rq

μ—¬λ³΄μ„Έμš” !

rq μž‘μ—…μžμ— λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

이것은 λ‚΄ μ•±μ˜ κ΅¬μ‘°μž…λ‹ˆλ‹€.

app/
    run.py
    project/
        __init__.py
        clock.py
        views.py
        worker.py
        controllers/
           __init__.py
           leads_fb.py

λ‚΄ 앱을 μ‹€ν–‰ν•˜λ©΄ μ‹œκ³„κ°€ μ‹€ν–‰λ˜κ³  이것은 μ½”λ“œμž…λ‹ˆλ‹€:

from apscheduler.schedulers.background import BackgroundScheduler
from rq import Queue, get_current_job
from rq.job import Job 
from worker import conn
from controllers import leads_fb
import logging
import os


q = Queue(connection=conn)
sched = BackgroundScheduler()

def enque_jobs():
    info = '1aooEOTBQz1pAW915-JonL3Jh2mhclR5EZTHGotFBe7s||blah blah blah'
    job = q.enqueue(leads_fb.prueba, info)  
    print 'This job is run every 3 seconds.'

if os.environ.get("WERKZEUG_RUN_MAIN") == "true":
    sched.add_job(enque_jobs, 'interval', seconds=3)
    sched.start()

log = logging.getLogger('apscheduler.executors.default')
# log.setLevel(logging.INFO)  # DEBUG

# fmt = logging.Formatter('%(levelname)s:%(name)s:%(message)s')
h = logging.StreamHandler()
# h.setFormatter(fmt)
log.addHandler(h)

그런 λ‹€μŒ clock은 worker.py인 rq μž‘μ—…μžλ‘œ μž‘μ—…μ„ λŒ€κΈ°μ—΄μ— λ„£μŠ΅λ‹ˆλ‹€.

import os

import redis
from rq import Worker, Queue, Connection

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')

conn = redis.from_url(redis_url)

if __name__ == '__main__':
    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()

λŒ€κΈ°μ—΄μ— μžˆλŠ” μž‘μ—…μ΄ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜λŠ” controllers/leads_fb.pyμž…λ‹ˆλ‹€.

from wksh import init_wksh, get_last_row, write_in_cell

def prueba(info):
    print 'aaaaa'
    info = info.split('||')
    id_client = info[0]
    str_prueba = info[1]
    wksh = init_wksh(id_client)
    print wksh
    row = get_last_row(wksh)

    write_in_cell(wksh,'A'+str(row),str_prueba)
    print 'funciona  ' + str(row)

루트 디렉토리에 μžˆλŠ” run.py 파일둜 앱을 μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. ImportError: No module named project.controllers.leads_fb

λ‚΄ run.py νŒŒμΌμ—λŠ” λ‹€μŒ μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

from project import app
from project import worker
from project import clock

if __name__ == "__main__":
    app.run(debug=True,host='127.0.0.1', port=1234)

λ‚΄ app/project/__init__.py νŒŒμΌμ—λŠ” λ‹€μŒμ΄ μžˆμŠ΅λ‹ˆλ‹€.

from flask import Flask

app = Flask(__name__)
app.config.from_object('config')

from . import views
from . import worker
from . import clock

λ„μ™€μ£Όμ„Έμš”!! λ‚˜λŠ” 일주일 λ™μ•ˆ 이것에 κ°‡ν˜€ μžˆμ—ˆκ³  이것을 κ³ μΉ  수 μ—†μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‹€λ₯Έ μŠ€λ ˆλ“œ 문제λ₯Ό μ½μ—ˆκ³  λ‚΄ λͺ¨λ“ˆ 디렉토리λ₯Ό λ‚΄ rq μž‘μ—…μžλ‘œ κ°€λ¦¬ν‚€λŠ” PYTHONPATH와 관련이 μžˆλ‹€λŠ” 것을 μ΄ν•΄ν–ˆμ§€λ§Œ 이것을 κ΅¬ν˜„ν•˜λŠ” 방법을 λͺ¨λ¦…λ‹ˆλ‹€. @selwin

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@mateocam 그것은 단지 일반 파이썬 sys 경둜 λͺ¨λ“ˆ κ°€μ Έμ˜€κΈ° ν•­λͺ©μž…λ‹ˆλ‹€. μ˜¬λ°”λ₯Έ λ””λ ‰ν† λ¦¬μ—μ„œ μ‹€ν–‰ν•˜κ±°λ‚˜ νŒ¨ν‚€μ§€λ₯Ό μ‹œμŠ€ν…œ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ„€μΉ˜ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.
μž‘μ—…μžλ₯Ό μ‹œμž‘ν•˜λŠ” 단일 bash μŠ€ν¬λ¦½νŠΈμ™€ ν•¨κ»˜ 예제 μ½”λ“œλ₯Ό github의 μ–΄λ”˜κ°€μ— λ„£μ–΄ λ‹€λ₯Έ μ‚¬λžŒμ΄ λ³΅μ œν•˜μ—¬ μž‘μ—…ν•  수 μžˆλ„λ‘ ν•˜μ‹­μ‹œμ˜€.

λͺ¨λ“  5 λŒ“κΈ€

μ–΄λ–»κ²Œ λ‚΄ worker.py νŒŒμΌμ— λŒ€ν•œ κ°€μ Έμ˜€κΈ° 경둜λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” ν…ŒμŠ€νŠΈν–ˆκ³  'rqworker' λͺ…령쀄을 μ‚¬μš©ν•˜μ—¬ 루트 λ””λ ‰ν† λ¦¬μ—μ„œ μž‘μ—…μžλ₯Ό μ‹œμž‘ν•˜λ©΄ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. λ‚΄ 앱은 worker.py 파일이 루트 디렉터리에 μžˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ‹€μ œλ‘œλŠ” 루트 디렉터리 λ‚΄λΆ€μ˜ project/에 μžˆμŠ΅λ‹ˆλ‹€. λ‘œμ»¬μ—μ„œ μž‘λ™ν•˜κ³  Heroku에도 λ°°ν¬λ˜λ„λ‘ μ§€μ •ν•˜λŠ” 방법과 μœ„μΉ˜λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

μ–΄λ–»κ²Œ λ‚΄ worker.py νŒŒμΌμ— λŒ€ν•œ κ°€μ Έμ˜€κΈ° 경둜λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” ν…ŒμŠ€νŠΈν–ˆκ³  'rqworker' λͺ…령쀄을 μ‚¬μš©ν•˜μ—¬ 루트 λ””λ ‰ν† λ¦¬μ—μ„œ μž‘μ—…μžλ₯Ό μ‹œμž‘ν•˜λ©΄ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. λ‚΄ 앱은 worker.py 파일이 루트 디렉터리에 μžˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ‹€μ œλ‘œλŠ” 루트 디렉터리 λ‚΄λΆ€μ˜ project/에 μžˆμŠ΅λ‹ˆλ‹€. λ‘œμ»¬μ—μ„œ μž‘λ™ν•˜κ³  Heroku에도 λ°°ν¬λ˜λ„λ‘ μ§€μ •ν•˜λŠ” 방법과 μœ„μΉ˜λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? @nvie rq의 λ¬Έμ„œλ₯Ό 검색

--path 인수λ₯Ό μ‚¬μš©ν•˜μ—¬ rq worker λͺ…령을 ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@selwin λ‹€μŒκ³Ό 같이 μž‘μ—…μžλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. rq worker --path project/
μ—¬μ „νžˆ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚΄ ν”„λ‘œμ νŠΈμ˜ 루트 λ””λ ‰ν„°λ¦¬μ—μ„œ μž‘μ—…μžλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. λ‚΄κ°€ 무엇을 λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

@mateocam 그것은 단지 일반 파이썬 sys 경둜 λͺ¨λ“ˆ κ°€μ Έμ˜€κΈ° ν•­λͺ©μž…λ‹ˆλ‹€. μ˜¬λ°”λ₯Έ λ””λ ‰ν† λ¦¬μ—μ„œ μ‹€ν–‰ν•˜κ±°λ‚˜ νŒ¨ν‚€μ§€λ₯Ό μ‹œμŠ€ν…œ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ„€μΉ˜ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.
μž‘μ—…μžλ₯Ό μ‹œμž‘ν•˜λŠ” 단일 bash μŠ€ν¬λ¦½νŠΈμ™€ ν•¨κ»˜ 예제 μ½”λ“œλ₯Ό github의 μ–΄λ”˜κ°€μ— λ„£μ–΄ λ‹€λ₯Έ μ‚¬λžŒμ΄ λ³΅μ œν•˜μ—¬ μž‘μ—…ν•  수 μžˆλ„λ‘ ν•˜μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰