MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Não é possível obter o pacote Accounts-Base para apontar para o banco de dados correto


Olhando diretamente no código do pacote accounts-base (Meteor v 1.0.4), parece que eles não suportam oficialmente uma maneira de definir o banco de dados para a coleção de usuários. Como você pode ver no código, o servidor sempre se conecta usando o Meteor.connection padrão:
Meteor.users = new Mongo.Collection("users", { // line 141
  _preventAutopublish: true,
  connection: Meteor.isClient ? Accounts.connection : Meteor.connection
});

O Accounts.connection está definido acima, mas é explicitamente não suportado:
// ~ line 118
if (Meteor.isClient
....
if (typeof __meteor_runtime_config__ !== "undefined" &&
  __meteor_runtime_config__.ACCOUNTS_CONNECTION_URL) { 
    // Temporary, internal hook to allow the server to point the client
    // to a different authentication server. This is for a very
    // particular use case that comes up when implementing a oauth
    // server. Unsupported and may go away at any point in time.
    //
    // We will eventually provide a general way to use account-base
    // against any DDP connection, not just one special one.
    Accounts.connection = DDP.connect(
      __meteor_runtime_config__.ACCOUNTS_CONNECTION_URL)
  }
}

No entanto, consegui fazer com que ele usasse meu banco de dados definindo a variável de ambiente $ MONGO_URL (que acredito definir a conexão padrão, que é usada pelo pacote accounts):

Em uma janela de terminal, iniciei o mongo na porta 27017
> mongod

Em outra janela, configurei o MONGO_URL e adicionei os pacotes apropriados, então iniciei o meteoro:
> export MONGO_URL=mongodb://localhost:27017/test
> meteor add accounts-base
> meteor add accounts-password
> meteor

E finalmente no console do meu navegador criei uma conta:
> Accounts.createUser({username: 'me', password: 'guest'});

Então me conectei ao test banco de dados na minha instância do mongo:
> mongo
  MongoDB shell version: 3.0.1
  connecting to: test
> db.users.find()
  { "_id" : "L3EDrS8FnRymDLhPp", ... "username" : "me" }

Resumindo, acho que você tem três opções não muito boas:
  • Use o MONGO_URL variável de ambiente (provavelmente a melhor opção)
  • Hackeie o pacote baseado em contas para fazer o que quiser
  • Experimente o ACCOUNTS_CONNECTION_URL não suportado variável, que pode 'desaparecer a qualquer momento'