web-dev-qa-db-ja.com

流星にデプロイされたアプリからデータをエクスポートする簡単な方法はありますか?

流星にデプロイされたアプリからデータをエクスポートする簡単な方法はありますか?

したがって、たとえば、test.meteor.comという名前のアプリを展開した場合...

そのアプリによって収集されたデータを簡単にダウンロードして、デプロイされたアプリのデータを使用してローカルで実行できるようにするにはどうすればよいですか?

72
Greg Mercer

Meteor.comでデプロイされたサイトのURLを取得するには、次のコマンドを使用します(パスワードで保護されている場合は、サイトのパスワードを入力する必要があります)。

meteor mongo --url YOURSITE.meteor.com

次のようなものが返されます:

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

mongodumpのようなプログラムに与えることができます

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

パスワードは1分間のみ有効です。使用法:

$ meteor --help mongo
91
Scott Anderson

そして、反対の方法を以下に示します:(ローカルのmonogo dbを流星にアップロードする)

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

Kasper Sourenのソリューションに基づいて、現在のバージョンのMeteorで動作し、リモートMeteorアプリをパスワードで保護するときにも動作する更新されたスクリプトを作成しました。

次のスクリプトを作成してください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

次に、* nixシェルで次のように実行します。

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

Meteorデータベースで便利に使用できるように、すべてのMongo DBクライアントシェルコマンドをラップするツールmmongoを作成しました。 npm(ノードパッケージマネージャー)を使用する場合、次のコマンドでインストールできます。

npm install -g mmongo

それ以外の場合は、 [〜#〜] readme [〜#〜] を参照してください。

Meteorデータベースをバックアップするには、次のようにします。

mmongo test.meteor.com dump 

それをあなたの地元の開発流星にアップロードするには:

mmongo restore dump/test_meteor_com

また、本番データベースを誤って削除した場合:

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

簡単に復元できます:

mmongo test.meteor.com restore dump/test_meteor_com 

コレクション(たとえばtasks)を読みやすいものにエクスポートする場合:

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

その後、tasks.jsonテキストエディタで、いくつかの変更を行い、次のように変更を挿入します。

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

Github[〜#〜] npm [〜#〜]

6
skagedal

あなたのデータはmongodbデータベースにあると思うので、もしそうなら、質問は流星よりもmongo関連です。 mongoexportおよびmongoimportコマンドラインツール をご覧ください。

編集(例):

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

このコマンドラインツールを使用するには、コンピューターにmongodbをインストールする必要があり、明らかに、mongodb情報が必要です。上記の例では、MongoHQに接続しています(flame.mongohq.comがホスト、 '12345'がmongoサーバーのポートです)が、実際に流星ホスティングで使用されているMongoホストはわかりません。 Meteorのサンプル(TODO、Leaderboardなど)をローカルで試した場合、デフォルトでローカルサーバーを使用するため、Mongoが既にインストールされている可能性があります。

5
mna

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 は、これを行う最も簡単な方法です。

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

2015年3月の時点で、フェッチするすべてのコレクションを指定する必要があります( この問題 が解決されるまで)。


過去からのスタッフ

私がやっている

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

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]}"

(meteor mongo -U --mongodumpoptionsがこれらのオプションを提供する場合、またはmongodumpが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/

ローカルデータベースをリモートデータベースにアップロードしているときに、アサーション例外が発生する

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

ライブデータベースをローカルにコピーするために、この単純なRakefileを作成しました。

ライブデータベースをローカルマシンに復元するには、次のようにします。

rake copy_live_db

myappをmeteor.comの名前に置き換えます-例:myapp.meteor.com

 require 'rubygems' 
 require 'open-uri' 
 
 desc「ライブDBをローカル./dumpフォルダーにバックアップ」
 task: backup_live_db do 
 uri = `meteor mongo myapp --url` 
 pass = uri.match(/ client:([^ @] +)@ /)[1] 
 puts 「ライブデータベースパスワードの使用:#{pass}」
 `mongodump -h meteor.m0.mongolayer.com:27017 -d myapp_meteor_com -u client -p#{pass}` 
 end 
 
 
 desc「ライブデータベースをローカルにコピー」
 task:copy_live_db =>:backup_live_db do 
 server = `meteor mongo --url` 
 uri = URI.parse(server)
 `mongorestore --Host#{uri.Host} --port#{uri.port} --db meteor --drop dump/myapp_meteor_com /` 
 end 
 
 desc "最後のバックアップを復元" 
 task:restore do 
 server = `meteor mongo --url` 
 uri = URI.parse(server)
 `mongorestore --Host#{uri.Host} --port#{uri.port} --db meteor --drop dump/myapp_meteor_com /` 
 end 
1
tobinharris

sshfs を介してリモートマウントされたファイルシステムを使用し、次に rsync を使用してmongodbのフォルダー自体またはMeteorフォルダー全体を同期できると思います。これは増分バックアップを行うようなもので、潜在的にはより効率的です。コードの変更などを送信するために同じソリューションを使用することは可能ですので、データベースの変更も同時に戻さないのはなぜですか?! (2羽の鳥を1石で殺す)

0
Master James

以下は、meteor.comがホストするサイトからデータベースをダンプできるシンプルなbashスクリプトです。

#!/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

_meteor deploy myAppName_サイトで既存のlocalmongodbデータベースを使用するには、mongodbをダンプしてから復元する必要があります。

上記の指示に従ってmongodump(パスを記憶)し、次を実行して 'mongorestore'を生成します(2番目のステップを置き換えてコピー/貼り付けします)。

CMD=meteor mongo -U myAppName.meteor.com | tail -1 | sed 's_mongodb://\([a-z0-9\-]*\):\([a-f0-9\-]*\)@\(.*\)/\(.*\)_mongorestore -u \1 -p \2 -h \3 -d \4_'

それから

_$CMD /path/to/dump 
_

From mongorestoreは個別の引数の代わりに単一のurl引数を取ることができますか?

0
DeBraid