2015-06-22 37 views
8

設置404試圖在谷歌App Engine的項目,以創建備份時

我下面這個問題的接受的解答AppEngine datastore - backup programatically

我已啓用數據存儲區管理後遇到的404問題,由答案提供者之一建議。我可以在Google App Engine控制檯中手動觸發數據存儲備份,並且備份無任何故障地運行。

此問題中的代碼位於名爲「app」的模塊中。不是'默認'。

404問題

這是cron.yaml cron作業。

cron: 
- description: Regular backup 
    url: /_backup/fullbackup 
    schedule: every 24 hours 

URL將將備份任務的隊列,這反過來又使以

_ah/datastore_admin/backup.create? 
gs_bucket_name=%2Fgs%2Ftest.appspot.com%2F21-06-2015&kind=Test&kind=TestContent 
&kind=TestDocument&filesystem=gs 

呼叫的處理程序(我代替我的應用程序ID與「測試」在這裏)

這顯示日誌中有一個錯誤。

enter image description here

如果我用我的應用程序的主機名以上URL在布勞爾(即https://test.appspot.com/_ah/datastore_admin/backup.create? gs_bucket_name=%2Fgs%2Ftest.appspot.com%2F21-06-2015&kind=Test&kind=TestContent &kind=TestDocument&filesystem=gs),我收到了404了。

enter image description here

這裏是在路由的處理程序相關代碼/_backup/fullbackup

task = taskqueue.add(
     url='/_ah/datastore_admin/backup.create', 
     method='GET', 
     target='ah-builtin-python-bundle', 
     params={ 
      'filesystem': 'gs', 
      'gs_bucket_name': self.get_bucket_name(), 
      'kind': (
       'Test', 
       'TestContent', 
       'TestDocument' 
      ) 
     } 
    ) 

問題:

  • 問題是什麼原因?
  • 我需要Python代碼的taskqueue.add部分中的隊列名嗎?
  • 在我的cron.yaml中,我是否需要設置目標爲ah-builtin-python-bundle

編輯

數據存儲管理員內置已經啓用,在這個截圖所示。

而且沒有dispatch.yaml

enter image description here

+0

可能重複[AppEngine上的數據存儲 - 備份編程(http://stackoverflow.com/questions/15811982/appengine-datastore-backup-programatically) – Nick

+0

@尼克這個問題沒有被接受的答案,並且**不**約404錯誤具體。 –

+2

真的,缺少一個被接受的答案並不重要。如果您閱讀問題和答案,並意識到僅在14天前發佈了一個工作示例。我剛剛測試過這個,它可以工作。我認爲這個問題可能是事實,你形成你的請求,而不是test.example.com your-app-id.appspot.com – Nick

回答

2

它關係到一個隊列配置問題。

A「缺省」隊列定義存在於常規備份的執行之前的app.yaml。備份任務是,作爲一個結果,而不是達到目標「啊 - 內置的Python束」

如果我定義了一個新的隊列

- name: data-backup 
    rate: 1/s 
    target: ah-builtin-python-bundle 

然後用這個代碼中插入任務,

task = taskqueue.add(
     url='/_ah/datastore_admin/backup.create', 
     method='GET', 
     queue_name="data-backup", 
     params={ 
      'filesystem': 'gs', 
      'gs_bucket_name': self.get_bucket_name(), 
      'kind': kinds_list # A list of ndb model classes I want to backup 
     } 
    ) 

然後谷歌應用程序引擎可以創建備份集的

6

你有enabled the Datastore Admin?您需要完成此操作以允許模塊ah-builtin-python-bundle存在,當您激活數據存儲區管理員時,這是一個「部署」到您的應用的特殊模塊,它真正負責響應/_ah/datastore_admin的請求併產生讀取的MapReduce作業從Datastore生成備份文件並在雲存儲中生成備份文件(或者將其發送到的任何地方)。

此外,另一種可能是你已經使用test.appspot.com硬編碼到您的應用程序。你是否擁有該應用ID,「測試」?從你在瀏覽器中看到錯誤的截圖,它看起來好像你正在試圖備份到鬥「test.appspot.com」,這將是與應用程序ID「測試」應用程序的默認桶。但是,在您顯示的日誌截圖中,它還會嘗試備份到「example.appspot.com」存儲桶。確保您的應用擁有這些存儲桶。

另一種可能性是正在處理的請求的模塊是不ah-builtin-python-bundle,而是另一個。即使您在任務添加方法中指定了不同的目標,也可能發生這種情況,如果您有dispatch rule正在重新路由請求。