Como faço para usar um MongoDB existente em um projeto Meteor?

85

Digamos que há um servidor MongoDB em execução para um cliente GUI (por wxPython ) por um tempo.

Como eu poderia conectar meu novo projeto Meteor ao MongoDB já existente ?

Drake Guan
fonte
Dror ( stackoverflow.com/users/460278/dror ) tem a resposta correta abaixo: stackoverflow.com/a/12996674/1114274
Mike Graf
Obrigado por comentar. Eu sei que a solução de @Dror é muito oficial em vez de um hack, mas já atribuí uma resposta antes. Não tenho certeza se é um comportamento bom e permitido alterar / atualizar a "resposta", então?
Drake Guan,
"Você pode alterar a resposta que é aceita ou simplesmente cancelar a aceitação da resposta a qualquer momento." meta.stackexchange.com/a/5235/191226
Mike Graf
1
Muito obrigado por me apontar isso. Estou mais confiante agora.
Drake Guan,

Respostas:

157

Use a variável de ambiente MONGO_URL. Algo como:

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

Substitua your_dbpor meteorou qualquer db que deseja usar.

Dror
fonte
4
Estou preso. Você pode explicar como substituir your_db por "meteoro"
Surjith SM
3
note que isso NÃO funcionará em prod se implantado em meteoro - consulte stackoverflow.com/questions/21971036/…
maxko87
2
@SurjithSM export MONGO_URL=mongodb://localhost:27017/my_database_namecolocará os dados em um banco de dados chamado my_database_name. Ele quis dizer que se você quiser, você pode fazer export MONGO_URL=mongodb://localhost:27017/meteor. Achei que eu aconselharia nomear o nome do seu banco de dados igual ao do seu projeto.
Benjamin Crouzier
1
Isso pode ser feito com algum arquivo de configuração? Tentei com settings.json e não funcionou
Kostanos
1
isso travou completamente meu aplicativo local.
Deborah
14

Usamos npm:

  • Crie um package.jsonarquivo com npm init, se ainda não tiver um.

  • Insira e modifique a seguinte linha nesse arquivo (substituindo todos os <...>'s):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • Você pode então iniciar o meteoro com apenasnpm run meteor
malix
fonte
'MONGO_URL' não é reconhecido como um comando interno ou externo
Abdul Hameed
1
é uma variável de ambiente, certifique-se de que não haja espaços ao redor do sinal =
malix
9

Nos comentários à resposta de Danny, Tom Wijsman recomenda patchear packages / mongo-vivata / mongo_driver.js, linha 21. Um lugar melhor é app / meteor / run.js, linha 460. Desta forma, a variável de ambiente ainda é selecionada se presente , como ao executar o Meteor no Heroku. Basta alterar o mongodb codificado padrão: //127.0.0.1 para a localização do seu servidor MongoDB.

David Wihl
fonte
4

Você pode usar db.copyDatabase para fazer isso, com uma ressalva de que há um bug e você não pode atualizar os dados no Meteor. Veja https://github.com/meteor/meteor/issues/61

Se você estiver usando a versão de desenvolvimento do Meteor, poderá transferir dados de um servidor MongoDB em execução iniciando seu aplicativo Meteor e, em seguida:

mongo --port 3002

Isso conectará você ao servidor Mongo do aplicativo Meteor. Agora use db.copyDatabase assim:

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

Isso copiará o banco de dados myappDatabase de um servidor MongoDB em execução na porta padrão no localhost, para o servidor Mongo do aplicativo Meteor. O nome do banco de dados que o aplicativo Meteor usa é 'meteoro'.

Josh Wulf
fonte
2

Basta copiar os dados para o banco de dados Meteor MongoDB - não há razão para tentar conectar o Meteor ao banco de dados existente e correr o risco de sobrescrever coisas.

Use mongoexportpara despejar suas coleções individualmente e, a seguir, mongoimportpara importar os arquivos para o banco de dados nomeado meteorna instância do Meteor MongoDB. A instância Meteor MongoDB é executada na porta 3002 com bind_address 127.0.0.1, e os arquivos de dados estão no subdiretório do projeto Meteor.meteor/local/db .

Consulte a documentação se você não estiver familiarizado com importação / exportação no MongoDB.

danny
fonte
Isso significa que devemos entregar a hospedagem mongodb ao meteoro em vez de hospedar por outros meios?
Drake Guan
2
@Drake: A menos que você possa ajustar o Meteor para trabalhar com seu banco de dados. app/lib/mongo_runner.jsdecide como iniciá-lo (você pode nem mesmo exigir o código de inicialização, portanto, veja como desativá-lo) A conexão para ele parece acontecer dentro packages/mongo-livedata/mongo_driver.js, eu acho que você pode simplesmente alterar o parâmetro url na linha 21. Se você quiser saber seu valor, insira console.log(url);na linha antes disso, reinicie o Meteor e observe sua saída do Meteor de perto. Certifique-se de realmente chamar o Meteor uma vez em seu aplicativo para que seja acionado ...
Tamara Wijsman
@Drake: Se você quiser que eu coloque meu comentário como uma resposta (se funcionou para você), por favor me avise.
Tamara Wijsman
@TomWijsman: Tentei console.log(url);e consegui a informação! Vou sugerir que você faça isso o mais completo possível, porque acredito que isso realmente ajuda a comunidade, ou pelo menos, pessoas como eu ainda não estão familiarizadas com meteoros ~
Drake Guan
muito mais fácil usar o mongochef para copiar e colar dados, em vez dos comandos de exportação / importação. 3t.io/mongochef
Max Hodges
0

Tudo o que fiz foi adicionar o IP do meu servidor digital de gotas ocean, em vez de localhost, e funcionou:

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

EDITAR: use o MUP para implantar seus projetos de meteoros: https://github.com/zodern/meteor-up

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

O Mup usa o Docker e "vincula" seus 2 contêineres, hospedando assim o aplicativo e o mongo na mesma VM (servidor). Seu mongoDB não deve ser acessível do IP público por razões de segurança.

Milean
fonte
onde você adicionou isso?
Gaurav Arya
na verdade, é uma má prática usar o IP público da sua VM para o mongoDB, vou atualizar minha resposta para usar o localhost.
Milean
0

Gastei muito tempo e descobri que isso requer aspas em torno do URL:

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

Você tem que manter seu aplicativo rodando em uma janela de terminal e então abrir outra e digitar "meteoro mongo" e deve funcionar!

pablo escobrah
fonte