App Engine: как "сбросить" хранилище данных?
Ну, я разрабатываю в App Engine (Java), и после многих попыток и развертываний мне нужно сброс хранилище данных. Есть много случайных данных, которые я добавил для тестирования производительности, и кроме того, объекты сильно изменились, поэтому мне нужно удалить все: данные, таблицы, индексы.
Как я могу это сделать?
15 ответов
в SQL нет встроенной команды, эквивалентной DROP TABLE или TRUNCATE TABLE. Вам просто нужно создать страницу "удалить все" в вашем приложении, а затем повторно вызвать эту страницу с помощью скрипта. На этой странице вы хотите удалить столько объектов, сколько еще можно ожидать до истечения времени ожидания запроса. Точный код зависит от того, используете ли вы JDO/JPA или низкоуровневый API. (API низкого уровня будет быстрее, потому что вы можете использовать пакет оперативный.)
этой так что вопрос в значительной степени тот же, только для Python
Извините, что разбудил эту тему, но на всякий случай я хотел бы добавить совет для таких, как я (наконец, нашел ответ в документации google):
Если вы хотите сбросить местные хранилище данных (например, при разработке с помощью eclipse) все сразу, выключите сервер, найдите файл'local_db.бин' в вашем проекте (должен быть в каталоге WEB-INF/appengine-generated/) и удалите его.
отлично работает с java, не пробовал с питон пока.
++
очистка хранилища данных сервера разработки
веб-сервер разработки использует локальную версию хранилища данных для тестирования приложения, используя временные файлы. Данные сохраняются до тех пор, пока существуют временные файлы, и веб-сервер не сбрасывает эти файлы, если вы не попросите его сделать это.
Если вы хотите, чтобы сервер разработки удалил свое хранилище данных перед запуском, используйте параметр --clear_datastore при запуске сервер:
dev_appserver.py --clear_datastore файл HelloWorld/
просто выполните запрос без фильтра, чтобы получить все объекты и удалить их один за другим.
import javax.servlet.http.*;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
Query mydeleteq = new Query();
PreparedQuery pq = datastore.prepare(mydeleteq);
for (Entity result : pq.asIterable()) {
datastore.delete(result.getKey());
}
}
извините, что так поздно, но я просто пытался сделать то же самое сам...
Я вошел в свою учетную запись (appengine.google.com) и нашел возможность просматривать хранилище данных с помощью утилиты администратора (datastore / dataviewer)... это позволяет создавать / обновлять / удалять.
согласно документам GAE вы можете удалить несколько объектов в JDO, вызовите deletePersistentAll (...) метод с коллекцией объектов.
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery("select from " + Your.class);
List<Your> objs = (List<Your>) query.execute();
pm.deletePersistentAll(objs);
удалить все (или часть) данных вашего приложения теперь является частью консоли администратора
чтобы включить эту функцию, просто включите следующее встроенное приложение.файл yaml:
builtins:
- datastore_admin: on
добавление этих строк в приложение.yaml включает страницу "администратор хранилища данных" в консоли администратора вашего приложения
Если вы используете maven в своем проекте, вы можете просто сделать "чистую установку mvn". Что сбросит хранилища локально конечно.
удаление локальных данных можно сделать, открыв http://localhost:8000/datastore
в моем случае (работа с Eclipse plugin и Play framework) мне пришлось остановить приложение, удалить файл /приложения/crud-gae/tmp/datastore, а затем перезапустить приложение
Это сработало для меня... работает, конечно, на месте...
при работе локально в Windows 7 файл является user\UserName\AppData\Local\Temp\dev_appserver.хранилище данных
я использовал App engine с Google Coursebuilder и должен был использовать эту команду, чтобы очистить хранилище данных:
python dev_appserver.py --clear_datastore /path/to/app
из контекста для Java dev, но так как документации мало, вот как это сделать в go:
keys, _ := datastore.NewQuery("").KeysOnly().GetAll(c, nil)
datastore.DeleteMulti(c, keys)
чтобы добавить еще один бит полезной информации: если вы используете Eclipse и хотите очистить локальное хранилище данных, найдите эту консоль msg:
INFO: Local Datastore initialized:
Storage: C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin
он появляется только после того, как вы делаете что-то, чтобы принудительно инициализировать хранилище данных, например, которое может обновлять список сущностей на странице администратора. Затем остановите сервер и удалите файл, и при перезапуске вы увидите:
INFO: The backing store, C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin, does not exist. It will be created.
Это не работает для меня.
У меня есть приложение GAE, где я должен войти в меня в начале.
Я удалил свой local_db.bin file (у меня есть больше файлов в этой папке: datastore-indexes-auto.xml и local_search.bn). Я снова открыл свой проект и запустил его как. Когда я запускаю свой main .jsp, это запрос загрузки из моего хранилища данных, но у меня нет данных в моем хранилище данных и спрашивает меня о моем PMF (persistent manager factory).
должен ли я удалить больше вещи?
точно, я пытаюсь открыть: localhost: 8888/_ah/admin/ но он не найден.
Диего.