web-dev-qa-db-fra.com

Existe-t-il un moyen simple d’exporter les données à partir d’une application déployée par météore?

Existe-t-il un moyen simple d’exporter les données à partir d’une application déployée par météore?

Donc, par exemple, si j'avais déployé une application nommée test.meteor.com ... 

Comment puis-je télécharger facilement les données collectées par cette application afin de pouvoir les exécuter localement avec les données de l'application déployée?

72
Greg Mercer

Pour obtenir l'URL de votre site déployé sur meteor.com, utilisez la commande (vous devrez peut-être fournir le mot de passe de votre site si vous l'avez protégé par mot de passe):

meteor mongo --url YOURSITE.meteor.com

Ce qui retournera quelque chose comme:

mongodb://client:[email protected]:27017/YOURSITE_meteor_com

Que vous pouvez donner à un programme comme mongodump

mongodump -u client -h sky.member1.mongolayer.com:27017 -d YOURSITE_meteor_com\
          -p PASSWORD

Le mot de passe n'est valable que pour une minute. Pour usage:

$ meteor --help mongo
91
Scott Anderson

Et voici comment faire le contraire: (télécharger votre base de données monogo locale sur météore) 

https://Gist.github.com/IslamMagdy/5519514

# How to upload local db to meteor:

# -h = Host, -d = database name, -o = dump folder name
mongodump -h 127.0.0.1:3002 -d meteor -o meteor

# get meteor db url, username, and password
meteor mongo --url myapp.meteor.com

# -h = Host, -d = database name (app domain), -p = password, folder = the path to the dumped db
mongorestore -u client -h c0.meteor.m0.mongolayer.com:27017 -d myapp_meteor_com -p 'password' folder/
38
iMagdy

Basé sur la solution de Kasper Souren, j'ai créé un script mis à jour qui fonctionne avec les versions actuelles de Meteor et fonctionne également lorsque vous protégez votre application Meteor distante avec un mot de passe.

Veuillez créer le script suivant parse-mongo-url.coffee:

spawn = require('child_process').spawn
mongo = spawn 'meteor', ['mongo', '--url', 'YOURPROJECT.meteor.com'], stdio: [process.stdin, 'pipe', process.stderr]

mongo.stdout.on 'data', (data) ->
    data = data.toString()
    m = data.match /mongodb:\/\/([^:]+):([^@]+)@([^:]+):27017\/([^\/]+)/
    if m?
        process.stdout.write "-u #{m[1]} -p #{m[2]} -h #{m[3]} -d #{m[4]}"
    else
        if data == 'Password: '
            process.stderr.write data

Puis exécutez-le comme ceci dans un shell * nix:

mongodump `coffee parse-mongo-url.coffee`
10
jerico

J'ai créé un outil, mmongo, qui englobe toutes les commandes Shell du client Mongo DB pour une utilisation pratique dans une base de données Meteor. Si vous utilisez npm (Node Package Manager), vous pouvez l’installer avec:

npm install -g mmongo

Sinon, voir README

Pour sauvegarder votre base de données Meteor, vous pouvez maintenant faire:

mmongo test.meteor.com dump 

Le télécharger sur votre météore de développement local serait:

mmongo restore dump/test_meteor_com

Et si vous supprimez accidentellement votre base de données de production:

mmongo test.meteor.com --eval 'db.dropDatabase()'   # whoops!

Vous pouvez facilement le restaurer:

mmongo test.meteor.com restore dump/test_meteor_com 

Si vous préférez exporter une collection (disons tasks) vers quelque chose de lisible:

mmongo test.meteor.com export -c tasks -o tasks.json

Ensuite, vous pouvez ouvrir tasks.json dans votre éditeur de texte, faire quelques modifications et insérer les modifications avec:

mmongo test.meteor.com import tasks.json -c tasks --upsert

Github , NPM

6
skagedal

Je suppose que vos données sont dans une base de données mongodb, donc si c'est le cas, la question est davantage liée au mongo qu'à météore. Vous pouvez consulter mongoexport et les outils de ligne de commande mongoimport .

Modifier (par exemple):

mongoexport -h flame.mongohq.com:12345 -u my_user -p my_pwd -d my_db -c my_coll

Vous devez installer mongodb sur votre ordinateur pour disposer de cet outil de ligne de commande, et vous avez évidemment besoin de vos informations mongodb. Dans l'exemple ci-dessus, je me connecte à MongoHQ (flame.mongohq.com est l'hôte, '12345' est le port de votre serveur mongo), mais je ne sais pas quel hôte Mongo est réellement utilisé par l'hébergement de météore. Si vous avez essayé les exemples Meteor (TODOs, Leaderboard, etc.) localement, il est probable que vous ayez déjà installé Mongo, car il utilise un serveur local par défaut.

5
mna

Voici une autre solution à bash

#! /bin/bash
# inspired by http://stackoverflow.com/questions/11353547/bash-string-extraction-manipulation

# http://www.davidpashley.com/articles/writing-robust-Shell-scripts/
set -o nounset
set -o errexit
set -o pipefail
set -x

# stackoverflow.com/questions/7216358/date-command-on-os-x-doesnt-have-iso-8601-i-option
function nowString {
    date -u +"%Y-%m-%dT%H:%M:%SZ"
}

NOW=$(nowString)

# prod_url="mongodb://...:...@...:.../..."
prod_pattern="mongodb://([^:]+):([^@]+)@([^:]+):([^/]+)/(.*)"
prod_url=$(meteor mongo katapoolt --url | tr -d '\n')
[[ ${prod_url} =~ ${prod_pattern} ]]
PROD_USER="${BASH_REMATCH[1]}"
PROD_PASSWORD="${BASH_REMATCH[2]}"
PROD_Host="${BASH_REMATCH[3]}"
PROD_PORT="${BASH_REMATCH[4]}"
PROD_DB="${BASH_REMATCH[5]}"
PROD_DUMP_DIR=dumps/${NOW}
mkdir -p dumps

# local_url="mongodb://...:.../..."
local_pattern="mongodb://([^:]+):([^/]+)/(.*)"
local_url=$(meteor mongo --url | tr -d '\n')
[[ ${local_url} =~ ${local_pattern} ]]
LOCAL_Host="${BASH_REMATCH[1]}"
LOCAL_PORT="${BASH_REMATCH[2]}"
LOCAL_DB="${BASH_REMATCH[3]}"

mongodump --Host ${PROD_Host} --port ${PROD_PORT} --username ${PROD_USER} --password ${PROD_PASSWORD} --db ${PROD_DB} --out ${PROD_DUMP_DIR}
mongorestore --port ${LOCAL_PORT} --Host ${LOCAL_Host} --db ${LOCAL_DB} ${PROD_DUMP_DIR}/${PROD_DB}
3
Le Stephane

meteor-backup est de loin le moyen le plus simple de le faire.

Sudo npm install -g meteor-db-utils
meteor-backup [domain] [collection...]

Depuis mars 2015, vous devez toujours spécifier toutes les collections que vous souhaitez récupérer (jusqu'à ce que ce problème soit résolu).


Des choses du passé ci-dessous

Je fais

mongodump $(meteor mongo -U example.meteor.com | coffee url2args.cfee)

avec ce petit coffeescript, avec une extension mutilée afin de ne pas confondre Meteor, url2args.cfee:

stdin = process.openStdin()
stdin.setEncoding 'utf8'
stdin.on 'data', (input) ->
  m = input.match /mongodb:\/\/(\w+):((\w+-)+\w+)@((\w+\.)+\w+):27017\/(\w+)/
  console.log "-u #{m[1]} -h #{m[4]} -p #{m[2]} -d #{m[6]}"

(Ce serait plus agréable si météore mongo -U --mongodumpoptions donnait ces options ou si mongodump acceptait mongo: // URL)

2
guaka
# How to upload local db to meteor:

# -h = Host, -d = database name, -o = dump folder name
mongodump -h 127.0.0.1:3001 -d meteor -o meteor

# get meteor db url, username, and password
meteor mongo --url myapp.meteor.com

# -h = Host, -d = database name (app domain), -p = password, folder = the path to the dumped db
mongorestore -u client -h http://production-db-a2.meteor.io:27017 -d myapp_meteor_com -p 'password' folder/

Lors du téléchargement de la base de données locale vers la base de données distante, avec une exception d'assertion

shubham@shubham-PC:$ mongorestore -u client -h http://production-db-a2.meteor.io:27017 -d myapp_meteor_com -p my_password local/
2015-04-22T16:37:38.504+0530 Assertion failure _setName.size() src/mongo/client/dbclientinterface.h 219
2015-04-22T16:37:38.506+0530 0xdcc299 0xd6c7c8 0xd4bfd2 0x663468 0x65d82e 0x605f98 0x606442 0x7f5d102f8ec5 0x60af41 
 mongorestore(_ZN5mongo15printStackTraceERSo+0x39) [0xdcc299]
 mongorestore(_ZN5mongo10logContextEPKc+0x198) [0xd6c7c8]
 mongorestore(_ZN5mongo12verifyFailedEPKcS1_j+0x102) [0xd4bfd2]
 mongorestore(_ZN5mongo16ConnectionStringC2ENS0_14ConnectionTypeERKSsS3_+0x1c8) [0x663468]
 mongorestore(_ZN5mongo16ConnectionString5parseERKSsRSs+0x1ce) [0x65d82e]
 mongorestore(_ZN5mongo4Tool4mainEiPPcS2_+0x2c8) [0x605f98]
 mongorestore(main+0x42) [0x606442]
 /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7f5d102f8ec5]
 mongorestore() [0x60af41]
terminate called after throwing an instance of 'mongo::AssertionException'
  what():  assertion src/mongo/client/dbclientinterface.h:219
Aborted (core dumped)
2
Shubham Aggarwal

J'ai fait ce simple Rakefile pour copier la base de données en direct au local.

Pour restaurer la base de données en direct sur ma machine locale, je fais juste ...

rake copy_live_db

Remplacez myapp par le nom de meteor.com - par exemple myapp.meteor.com.

 require 'rubygems' 
 require 'open-uri' 

 desc "Sauvegardez la base de données dynamique dans le dossier ./dump local" 
 task: backup_live_db do 
 uri = `meteor mongo myapp --url` 
 pass = uri.match (/ client: ([^ @] +) @ /) [1] 
 met "Utilisation du mot de passe de la base de données en direct: # {pass}" 
 `mongodump -h meteor.m0.mongolayer.com:27017 -d monapp_meteor_com -u client -p # {pass}` 
 end 


 desc "Copier la base de données dynamique en local" 
 tâche: copy_live_db =>: backup_live_db do 
 serveur = `meteor mongo --url` 
 uri = URI.parse (serveur) 
 `mongorestore --Host # {uri.Host} --port # {uri.port} --db météore --drop dump/myapp_meteor_com /` 
 end 

 desc "Restaure la dernière sauvegarde" 
task: restaurer faire 
 serveur = `meteor mongo --url` 
 uri = URI.parse (serveur) 
 `mongorestore --Host # {uri.Host} --port # {uri.port} --db météore --drop dump/myapp_meteor_com /` 
 end 
1
tobinharris

Je pense que vous pouvez utiliser un système de fichiers monté à distance via sshfs puis rsync pour synchroniser le dossier de mongodb lui-même ou votre dossier Meteor dans son intégralité, je crois également. C'est comme faire une sauvegarde incrémentielle et potentiellement plus efficace… .. Il est possible d'utiliser la même solution pour envoyer les modifications de votre code, etc., alors pourquoi ne pas récupérer les modifications de la base de données en même temps?! (Tuer 2 oiseaux avec 1 pierre)

0
Master James

Voici un script bash simple qui vous permet de sauvegarder votre base de données à partir de sites hébergés sur meteor.com.

#!/bin/bash

site="rankz.meteor.com"
name="$(meteor mongo --url $site)"
echo $name

IFS='@' read -a mongoString <<< "$name"

echo "HEAD: ${mongoString[0]}"
echo "TAIL: ${mongoString[1]}"

IFS=':' read -a pwd <<< "${mongoString[0]}"

echo "${pwd[1]}"
echo "${pwd[1]:2}"
echo "${pwd[2]}"


IFS='/' read -a site <<< "${mongoString[1]}"

echo "${site[0]}"
echo "${site[1]}"


mongodump -u ${pwd[1]:2} -h ${site[0]} -d ${site[1]}\
          -p ${pwd[2]}
0
user3035844