Plone 사이트 개체에 액세스해야하는 예약 된 작업이 있습니다 (apscheduler.scheduler
lib를 사용하고 있습니다).이 경우 컨텍스트가 없습니다. IProcessingStart
이벤트를 구독했지만 불행하게도 getSite()
함수는 None
을 반환합니다.컨텍스트없이 "plone 사이트 개체"에 액세스하는 방법?
또한, Zope Server 루트에서 특정 Plone 사이트를 얻는 프로그래밍 방식이 있습니까?
추가 정보 :
나는 일이 같이 있습니다
이from zope.site import hooks
sched = Scheduler()
@sched.cron_schedule(day_of_week="*", hour="9", minute="0")
def myjob():
site = hooks.getSite()
print site
print site.absolute_url()
catalogtool = getToolByName(site, "portal_catalog")
print catalogtool
site
변수는 항상 APScheduler 작업 내부 None
입니다. 그리고 우리는 사이트를 올바르게 운영하기위한 정보가 필요합니다.
사용자가 직접 작업을 실행할 수 있으므로 공용 URL을 사용하지 않아도됩니다.
Plone 사이트와 정확히 얼마나 일하고 있습니까? 왜 사이트에서 특정 URL을 실행하지 않습니까? –
안녕하세요, Martijn. 나는 몇 가지 정보를 추가하고 당신의 질문에 답하려고 노력했다. 아래의 답변에 표시된대로 getSite()가 ZODB 연결을 열지 않고 유효한 값 (사이트 객체)을 반환하는 방법이 있습니까? –
아니요, 어딘가에서 사이트를로드하지 않고 * 가질 수는 없습니다. APScheduler에 익숙하지 않지만 예약 된 작업을 실행하는 별도의 스레드가 필요하다면 새로운 ZODB 연결을 열어 거기에서 Plone 사이트를 불러 와서 해당 개체로'setSite()'를 호출해야합니다. –