Come si usa un MongoDB esistente in un progetto Meteor?


85

Supponiamo che ci sia un server MongoDB in esecuzione per un client GUI (di wxPython ) per un po '.

Come posso collegare il mio nuovo progetto Meteor al mio MongoDB già esistente ?



Grazie per il commento. So che la soluzione di @ Dror è molto ufficiale invece di un hack, ma ho già assegnato una risposta in precedenza. Non sono abbastanza sicuro che sia un comportamento valido e consentito cambiare / aggiornare la "risposta", allora?
Drake Guan

"Puoi modificare quale risposta è accettata, o semplicemente rifiutare la risposta, in qualsiasi momento." meta.stackexchange.com/a/5235/191226
Mike Graf

1
Grazie mille per avermi indicato questo. Adesso sono più fiducioso.
Drake Guan

Risposte:


157

Utilizza la variabile d'ambiente MONGO_URL. Qualcosa di simile a:

export MONGO_URL=mongodb://localhost:27017/your_db

Sostituisci your_dbcon meteoro qualsiasi altro db che desideri utilizzare.


4
Sono bloccato. Puoi spiegare come sostituire your_db con "meteor"
Surjith SM

3
Si noti che questo non funziona sul prod se la distribuzione di meteora - vedere stackoverflow.com/questions/21971036/...
maxko87

2
@SurjithSM export MONGO_URL=mongodb://localhost:27017/my_database_nameinserirà i dati in un database denominato my_database_name. Voleva dire che se vuoi, puoi farlo export MONGO_URL=mongodb://localhost:27017/meteor. Pensavo che consiglierei di nominare il nome del tuo database come il tuo progetto.
Benjamin Crouzier

1
Può essere fatto con qualche file di configurazione?
Ho

1
questo ha causato un arresto anomalo della mia app locale.
Deborah

14

Usiamo npm:

  • Crea un package.jsonfile con npm init, se non ne hai già uno.

  • Immettere e modificare la seguente riga in quel file (sostituendo tutti <...>i):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • Puoi quindi avviare meteor con solonpm run meteor

"MONGO_URL" non è riconosciuto come comando interno o esterno
Abdul Hameed

1
è una variabile d'ambiente, assicurati che non ci siano spazi intorno al segno =
malix

9

Nei commenti alla risposta di danny, Tom Wijsman consiglia di patchare i pacchetti / mongo-livesata / mongo_driver.js, riga 21. Un posto migliore è in app / meteor / run.js, riga 460. In questo modo la variabile d'ambiente viene ancora rilevata se presente , come quando si esegue Meteor su Heroku. Basta cambiare il mongodb con codice fisso predefinito: //127.0.0.1 nella posizione del tuo server MongoDB.


4

Puoi usare db.copyDatabase per farlo, con l'avvertenza che c'è un bug e non puoi aggiornare i dati in Meteor. Vedi https://github.com/meteor/meteor/issues/61

Se stai utilizzando la versione di sviluppo di Meteor, puoi trasferire i dati da un server MongoDB in esecuzione avviando la tua app Meteor, quindi facendo:

mongo --port 3002

Questo ti collegherà al server Mongo dell'app Meteor. Ora usa db.copyDatabase in questo modo:

db.copyDatabase('myappDatabase', 'meteor', 'localhost');

Questo copierà il database myappDatabase da un server MongoDB in esecuzione sulla porta standard su localhost, al server Mongo dell'app Meteor. Il nome del database utilizzato dall'app Meteor è "meteor".


2

Basta copiare i dati nel database Meteor MongoDB - non c'è motivo di provare ad agganciare Meteor al database esistente e rischiare di sovrascrivere le cose.

Utilizzare per mongoexporteseguire il dump delle raccolte individualmente, quindi mongoimportper importare i file nel database denominato meteornell'istanza di Meteor MongoDB. L'istanza Meteor MongoDB viene eseguita sulla porta 3002 con bind_address 127.0.0.1 e i file di dati si trovano nella sottodirectory del progetto Meteor .meteor/local/db.

Consulta la documentazione se non hai familiarità con l'importazione / esportazione in MongoDB.


Ciò significa che dovremmo fornire l'hosting mongodb a meteor invece di ospitare con altri mezzi?
Drake Guan

2
@ Drake: a meno che tu non possa regolare Meteor in modo che funzioni con il tuo database. app/lib/mongo_runner.jsdecide come avviarlo (potresti anche non richiedere il lancio del codice, quindi guarda come disabilitarlo). La connessione ad esso sembra avvenire all'interno packages/mongo-livedata/mongo_driver.js, penso che tu possa semplicemente cambiare il parametro url sulla riga 21. Se vuoi conoscere il suo valore, inseriscilo console.log(url);nella riga precedente, riavvia Meteor e guarda attentamente l'output di Meteor. Assicurati di chiamare effettivamente Meteor una volta nella tua app affinché si
attivi

@ Drake: se vuoi che metta il mio commento come risposta (se ha funzionato per te), fammelo sapere.
Tamara Wijsman

@ TomWijsman: ho provato console.log(url);e ho ottenuto le informazioni! Ti suggerisco di renderlo completo come una soluzione alternativa perché credo che fornisca aiuto alla comunità, o almeno, a persone come me che non hanno ancora familiarità con meteor ~
Drake Guan

diamine è molto più facile usare mongochef per copiare e incollare dati, piuttosto che i comandi di esportazione / importazione. 3t.io/mongochef
Max Hodges

0

Tutto quello che ho fatto è stato aggiungere l'IP del mio server Digital ocean droplet, invece di localhost, e ha funzionato:

env: {
      ROOT_URL: 'http://yourdomain.com',
      MONGO_URL: 'mongodb://104.236.24.66:27017/meteor',
      PORT: 3002,
    },

MODIFICA: usa MUP per distribuire i tuoi progetti meteorici: https://github.com/zodern/meteor-up

env: {
      ROOT_URL: 'https://www.example.com',
      MONGO_URL: 'mongodb://localhost/meteor',
    },

Mup utilizza Docker e "collegherà" i tuoi 2 contenitori, ospitando così sia l'app che mongo sulla stessa VM (server). Il tuo mongoDB non dovrebbe essere accessibile dall'IP pubblico per motivi di sicurezza.


dove l'hai aggiunto?
Gaurav Arya

in realtà è una cattiva pratica usare l'IP pubblico della tua VM per mongoDB, aggiornerò la mia risposta per usare localhost.
Milean

0

Ho trascorso molto tempo e ho scoperto che richiede virgolette attorno all'URL:

export MONGO_URL='mongodb://localhost/meteor'
export MONGO_OPLOG_URL='op log url'

-6

Devi mantenere la tua app in esecuzione in una finestra del terminale, quindi aprirne un'altra e digitare "meteor mongo" e dovrebbe funzionare!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.