¿Cómo utilizo un MongoDB existente en un proyecto Meteor?

84

Digamos que hay un servidor MongoDB en ejecución para un cliente GUI (por wxPython ) durante un tiempo.

¿Cómo puedo conectar mi nuevo proyecto Meteor a mi MongoDB ya existente ?

Drake Guan
fuente
Dror ( stackoverflow.com/users/460278/dror ) tiene la respuesta correcta a continuación: stackoverflow.com/a/12996674/1114274
Mike Graf
Gracias por comentar. Sé que la solución de @ Dror es mucho más oficial en lugar de un truco, pero ya he asignado una respuesta antes. ¿Entonces no estoy muy seguro de si es un comportamiento bueno y permisible cambiar / actualizar la "respuesta"?
Drake Guan
"Puede cambiar la respuesta que se acepta, o simplemente rechazar la respuesta, en cualquier momento". meta.stackexchange.com/a/5235/191226
Mike Graf
1
Muchas gracias por señalarme esto. Ahora tengo más confianza.
Drake Guan

Respuestas:

156

Utilice la variable de entorno MONGO_URL. Algo como:

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

Reemplace your_dbcon meteoro con la base de datos que desee usar.

Dror
fuente
4
Estoy atascado. ¿Puedes explicar cómo reemplazar your_db con "meteor"
Surjith SM
3
tenga en cuenta que esto NO funcionará en prod si se implementa en meteor - consulte stackoverflow.com/questions/21971036/…
maxko87
2
@SurjithSM export MONGO_URL=mongodb://localhost:27017/my_database_namepondrá los datos en una base de datos llamada my_database_name. Quería decir que si quieres, puedes hacerlo export MONGO_URL=mongodb://localhost:27017/meteor. Pensé que aconsejaría nombrar el nombre de su base de datos de la misma manera que su proyecto.
Benjamin Crouzier
1
¿Se puede hacer con algún archivo de configuración? Probé con settings.json y no funcionará
Kostanos
1
esto se estrelló muchísimo en mi aplicación local.
Deborah
14

Usamos npm:

  • Cree un package.jsonarchivo con npm init, si aún no tiene uno.

  • Ingrese y modifique la siguiente línea en ese archivo (reemplazando todas las <...>'s):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • A continuación, puede iniciar meteoro con solonpm run meteor
malix
fuente
'MONGO_URL' no se reconoce como un comando interno o externo
Abdul Hameed
1
es una variable de entorno, asegúrese de que no haya espacios alrededor del signo =
malix
9

En los comentarios a la respuesta de danny, Tom Wijsman recomienda parchear los paquetes / mongo-livedata / mongo_driver.js, línea 21. Un lugar mejor es app / meteor / run.js, línea 460. De esta manera, la variable de entorno aún se selecciona si está presente , como cuando se ejecuta Meteor en Heroku. Simplemente cambie el mongodb: //127.0.0.1 codificado por defecto a la ubicación de su servidor MongoDB.

David Wihl
fuente
4

Puede usar db.copyDatabase para hacer esto, con la advertencia de que hay un error y no puede actualizar los datos en Meteor. Ver https://github.com/meteor/meteor/issues/61

Si está utilizando la versión de desarrollo de Meteor, puede transferir datos desde un servidor MongoDB en ejecución iniciando su aplicación Meteor y luego haciendo:

mongo --port 3002

Esto lo conectará al servidor Mongo de la aplicación Meteor. Ahora use db.copyDatabase así:

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

Esto copiará la base de datos myappDatabase de un servidor MongoDB que se ejecuta en el puerto estándar en localhost, al servidor Mongo de la aplicación Meteor. El nombre de la base de datos que utiliza la aplicación Meteor es 'meteorito'.

Josh Wulf
fuente
2

Simplemente copie los datos a la base de datos Meteor MongoDB, no hay razón para intentar conectar Meteor a la base de datos existente y arriesgarse a sobrescribir cosas.

Use mongoexportpara volcar sus colecciones individualmente, luego mongoimportpara importar los archivos a la base de datos nombrada meteoren la instancia de Meteor MongoDB. La instancia de Meteor MongoDB se ejecuta en el puerto 3002 con bind_address 127.0.0.1, y los archivos de datos están en el subdirectorio del proyecto Meteor .meteor/local/db.

Consulte la documentación si no está familiarizado con la importación / exportación en MongoDB.

danny
fuente
¿Eso significa que deberíamos entregar el alojamiento de mongodb a meteor en lugar de hacerlo por otros medios?
Drake Guan
2
@Drake: a menos que pueda ajustar Meteor para que funcione con su base de datos. app/lib/mongo_runner.jsdecide cómo ejecutarlo (es posible que ni siquiera necesite el código de lanzamiento, por lo tanto, busque cómo deshabilitarlo). La conexión parece ocurrir en el interior packages/mongo-livedata/mongo_driver.js, creo que simplemente puede cambiar el parámetro url en la línea 21. Si desea saber su valor, inserte console.log(url);en la línea anterior, reinicie Meteor y observe de cerca la salida de Meteor. Asegúrese de llamar a Meteor una vez en su aplicación para que se active ...
Tamara Wijsman
@Drake: Si quieres que coloque mi comentario como respuesta (si te funcionó), házmelo saber.
Tamara Wijsman
@TomWijsman: ¡Lo intenté console.log(url);y obtuve la información! Le sugiero que haga esto tan completo como una respuesta alternativa porque creo que brinda ayuda a la comunidad, o al menos, a personas como yo que aún no están familiarizadas con el meteorito ~
Drake Guan
Mucho más fácil de usar mongochef para copiar y pegar datos, en lugar de los comandos de exportación / importación. 3t.io/mongochef
Max Hodges
0

Todo lo que hice fue agregar la IP de mi servidor de gotas oceánicas digitales, en lugar de localhost, y funcionó:

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

EDITAR: use MUP para implementar sus proyectos de meteoritos: https://github.com/zodern/meteor-up

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

Mup usa Docker y "vinculará" sus 2 contenedores, alojando así tanto la aplicación como mongo en la misma VM (servidor). Su mongoDB no debería ser accesible desde la IP pública por razones de seguridad.

Milean
fuente
¿Dónde agregaste esto?
Gaurav Arya
En realidad, es una mala práctica usar la IP pública de su VM para mongoDB, voy a actualizar mi respuesta para usar localhost.
Milean
0

Pasó mucho tiempo y descubrí que requiere comillas alrededor de la URL:

export MONGO_URL='mongodb://localhost/meteor'
export MONGO_OPLOG_URL='op log url'
Shaharyar
fuente
-6

Tienes que mantener tu aplicación ejecutándose en una ventana de terminal, luego abrir otra y escribir "meteor mongo" ¡y debería funcionar!

pablo escobrah
fuente