2015-06-22 10 views
8

Konfiguracja404 podczas próby utworzenia kopii zapasowej w Google App projektu silnika

I napotkał problem 404 po wykonaniu nieakceptowanych odpowiedź na pytanie AppEngine datastore - backup programatically

mam włączoną datastore Administrator, jako sugerowane przez jednego z dostawców odpowiedzi. Mogę ręcznie wyzwolić kopię zapasową magazynu danych w konsoli Google App Engine i wykonywać kopie zapasowe bez żadnej awarii.

Kod w tym pytaniu znajduje się w module o nazwie "aplikacja". Nie "domyślny".

404 Problem

To zadanie crona w cron.yaml.

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

Handler URL będzie umieścić zadania tworzenia kopii zapasowej w kolejce, co z kolei zatelefonować do

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

(wymieniłem mojego app id z 'testu' tutaj)

Wskazuje to na błąd w dzienniku: .

enter image description here

Jeśli używam powyższy link z moim app nazwę hosta w Brower (tj 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), otrzymuję 404 też.

enter image description here

Oto odpowiedni kod w programie obsługi trasy /_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' 
      ) 
     } 
    ) 

Pytania:

  • Co jest przyczyną problemu?
  • Czy potrzebuję nazwy kolejki w kodzie Pythona taskqueue.add?
  • Czy w moim pliku cron.yaml trzeba ustawić wartość docelową na ah-builtin-python-bundle?

EDIT

datastore-admin wbudowane zostały włączone, jak widać na tym screenie.

I nie ma dispatch.yaml

enter image description here

+0

możliwy duplikat [AppEngine magazynu danych - backup programowo] (http://stackoverflow.com/questions/15811982/appengine-datastore-backup-programatically) – Nick

+0

@Nick pytanie nie ma zaakceptowanej odpowiedzi i ** nie ** dotyczy błędu 404. –

+2

Brak zaakceptowanej odpowiedzi jest naprawdę nieistotny. Jeśli przeczytasz pytanie i odpowiedzi, zdasz sobie sprawę, że działający przykład został wysłany zaledwie 14 dni temu. Właśnie to przetestowałem i działa. Myślę, że przyczyną problemu może być fakt, że Twoja prośba została wystawiona na test.example.com zamiast na adres -app-id.appspot.com. – Nick

Odpowiedz

2

Jest to związane z problemem konfiguracji kolejki.

"Domyślna" definicja kolejki była obecna w pliku app.yaml przed wdrożeniem regularnej kopii zapasowej. Zadania tworzenia kopii zapasowych są, w wyniku, nie osiągając cel „ah-wbudowane-python-bundle”

Gdybym zdefiniować nową kolejkę

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

następnie wykorzystać ten kod, aby wstawić zadanie

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 
     } 
    ) 

Następnie silnik aplikacja Google może tworzyć backup set

6

Czy masz enabled the Datastore Admin? Musisz to zrobić, aby umożliwić istnienie modułu ah-builtin-python-bundle, który jest specjalnym modułem "wdrożonym" w Twojej aplikacji po aktywowaniu Administratora Datastore, który naprawdę odpowiada za odpowiedzi na zapytania do /_ah/datastore_admin i odradza zadania MapReduce, które czytają z Datastore i produkować pliki kopii zapasowych w Cloud Storage (lub w dowolnym innym miejscu, do którego je wysłałeś).

Inną możliwością jest użycie na stałe aplikacji test.appspot.com. Czy jesteś właścicielem tego identyfikatora aplikacji, "test"? Na zrzucie ekranu błędu widocznego w przeglądarce wygląda na to, że próbujesz utworzyć kopię zapasową do zasobnika "test.appspot.com", który byłby domyślnym zasobnikiem aplikacji z identyfikatorem aplikacji "test". Jednak na wyświetlonym zrzucie dziennika próbuje również utworzyć kopię zapasową do wiadra "example.appspot.com". Upewnij się, że Twoja aplikacja jest właścicielem tego zasobnika.

Inną możliwością jest to, że moduł, który obsługuje żądanie, nie jest ah-builtin-python-bundle, ale raczej inny. Może się to zdarzyć, nawet jeśli podasz inny cel w metodzie dodawania zadań, jeśli masz dispatch rule, który zmienia trasę żądania.

Powiązane problemy