sails: Attempting to tear down a datastore (`production`) which is not currently registered with this adapter
Sails version: 1.0.2 Node version: v8.9.4 NPM version: 6.1.0 DB adapter name: sails-mongo DB adapter version: 1.0.1 Operating system: Mac OSX High Sierra
I'm getting this stack trace
Could not tear down the ORM hook. Error details: Error: Consistency violation: Attempting to tear down a datastore (`production`) which is not currently registered with this adapter. This is usually due to a race condition in userland code (e.g. attempting to tear down the same ORM instance more than once), or it could be due to a bug in this adapter. (If you get stumped, reach out at http://sailsjs.com/support.) at Object.teardown (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/sails-mongo/lib/index.js:390:19) at /Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/waterline/lib/waterline.js:758:27 at /Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/async/dist/async.js:3047:20 at eachOfArrayLike (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/async/dist/async.js:1002:13) at eachOf (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/async/dist/async.js:1052:9) at Object.eachLimit (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/async/dist/async.js:3111:7) at Object.teardown (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/waterline/lib/waterline.js:742:11) at Hook.teardown (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/sails-hook-orm/index.js:246:30) at Sails.wrapper (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/@sailshq/lodash/lib/index.js:3275:19) at Object.onceWrapper (events.js:313:30) at emitNone (events.js:106:13) at Sails.emit (events.js:208:7) at Sails.emitter.emit (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/sails/lib/app/private/after.js:56:26) at /Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/sails/lib/app/lower.js:67:11 at beforeShutdown (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/sails/lib/app/lower.js:45:12) at Sails.lower (/Users/garritfra/Documents/dev/GitHub/sailsBackend/node_modules/sails/lib/app/lower.js:49:3)My datastore config
/**
* Datastores
* (sails.config.datastores)
*
* A set of datastore configurations which tell Sails where to fetch or save
* data when you execute built-in model methods like `.find()` and `.create()`.
*
* > This file is mainly useful for configuring your development database,
* > as well as any additional one-off databases used by individual models.
* > Ready to go live? Head towards `config/env/production.js`.
*
* For more information on configuring datastores, check out:
* https://sailsjs.com/config/datastores
*/
module.exports.datastores = {
/***************************************************************************
* *
* Your app's default datastore. *
* *
* Sails apps read and write to local disk by default, using a built-in *
* database adapter called `sails-disk`. This feature is purely for *
* convenience during development; since `sails-disk` is not designed for *
* use in a production environment. *
* *
* To use a different db _in development_, follow the directions below. *
* Otherwise, just leave the default datastore as-is, with no `adapter`. *
* *
* (For production configuration, see `config/env/production.js`.) *
* *
***************************************************************************/
production: {
/***************************************************************************
* *
* Want to use a different database during development? *
* *
* 1. Choose an adapter: *
* https://sailsjs.com/plugins/databases *
* *
* 2. Install it as a dependency of your Sails app. *
* (For example: npm install sails-mysql --save) *
* *
* 3. Then pass it in, along with a connection URL. *
* (See https://sailsjs.com/config/datastores for help.) *
* *
***************************************************************************/
adapter: 'sails-mongo',
url: 'mongodb://schulenberg:schulenberg@garrit-franke.de:27017/schulenberg',
},
default: {
adapter: 'sails-disk',
},
};
env/production config
/**
* Production environment settings
* (sails.config.*)
*
* What you see below is a quick outline of the built-in settings you need
* to configure your Sails app for production. The configuration in this file
* is only used in your production environment, i.e. when you lift your app using:
*
* ```
* NODE_ENV=production node app
* ```
*
* > If you're using git as a version control solution for your Sails app,
* > this file WILL BE COMMITTED to your repository by default, unless you add
* > it to your .gitignore file. If your repository will be publicly viewable,
* > don't add private/sensitive data (like API secrets / db passwords) to this file!
*
* For more best practices and tips, see:
* https://sailsjs.com/docs/concepts/deployment
*/
module.exports = {
/**************************************************************************
* *
* Tell Sails what database(s) it should use in production. *
* *
* (https://sailsjs.com/config/datastores) *
* *
**************************************************************************/
datastores: {
/***************************************************************************
* *
* Configure your default production database. *
* *
* 1. Choose an adapter: *
* https://sailsjs.com/plugins/databases *
* *
* 2. Install it as a dependency of your Sails app. *
* (For example: npm install sails-mysql --save) *
* *
* 3. Then set it here (`adapter`), along with a connection URL (`url`) *
* and any other, adapter-specific customizations. *
* (See https://sailsjs.com/config/datastores for help.) *
* *
***************************************************************************/
default: 'production',
//--------------------------------------------------------------------------
// /\ To avoid checking it in to version control, you might opt to set
// || sensitive credentials like `url` using an environment variable.
//
// For example:
// ```
// :sails_datastores__default__url=mysql://admin:myc00lpAssw2D@db.example.com:3306/my_prod_db
// ```
//--------------------------------------------------------------------------
/****************************************************************************
* *
* More adapter-specific options *
* *
* > For example, for some hosted PostgreSQL providers (like Heroku), the *
* > extra `ssl: true` option is mandatory and must be provided. *
* *
* More info: *
* https://sailsjs.com/config/datastores *
* *
****************************************************************************/
// ssl: true,
},
models: {
/***************************************************************************
* *
* To help avoid accidents, Sails automatically sets the automigration *
* strategy to "safe" when your app lifts in production mode. *
* (This is just here as a reminder.) *
* *
* More info: *
* https://sailsjs.com/docs/concepts/models-and-orm/model-settings#?migrate *
* *
***************************************************************************/
migrate: 'safe',
/***************************************************************************
* *
* If, in production, this app has access to physical-layer CASCADE *
* constraints (e.g. PostgreSQL or MySQL), then set those up in the *
* database and uncomment this to disable Waterline's `cascadeOnDestroy` *
* polyfill. (Otherwise, if you are using a databse like Mongo, you might *
* choose to keep this enabled.) *
* *
***************************************************************************/
// cascadeOnDestroy: false,
},
/**************************************************************************
* *
* Always disable "shortcut" blueprint routes. *
* *
* > You'll also want to disable any other blueprint routes if you are not *
* > actually using them (e.g. "actions" and "rest") -- but you can do *
* > that in `config/blueprints.js`, since you'll want to disable them in *
* > all environments (not just in production.) *
* *
***************************************************************************/
blueprints: {
shortcuts: false,
},
/***************************************************************************
* *
* Configure your security settings for production. *
* *
* IMPORTANT: *
* If web browsers will be communicating with your app, be sure that *
* you have CSRF protection enabled. To do that, set `csrf: true` over *
* in the `config/security.js` file (not here), so that CSRF app can be *
* tested with CSRF protection turned on in development mode too. *
* *
***************************************************************************/
security: {
/***************************************************************************
* *
* If this app has CORS enabled (see `config/security.js`) with the *
* `allowCredentials` setting enabled, then you should uncomment the *
* `allowOrigins` whitelist below. This sets which "origins" are allowed *
* to send cross-domain (CORS) requests to your Sails app. *
* *
* > Replace "https://example.com" with the URL of your production server. *
* > Be sure to use the right protocol! ("http://" vs. "https://") *
* *
***************************************************************************/
cors: {
// allowOrigins: [
// 'https://example.com',
// ]
},
},
/***************************************************************************
* *
* Configure how your app handles sessions in production. *
* *
* (https://sailsjs.com/config/session) *
* *
* > If you have disabled the "session" hook, then you can safely remove *
* > this section from your `config/env/production.js` file. *
* *
***************************************************************************/
session: {
/***************************************************************************
* *
* Production session store configuration. *
* *
* Uncomment the following lines to finish setting up a package called *
* "@sailshq/connect-redis" that will use Redis to handle session data. *
* This makes your app more scalable by allowing you to share sessions *
* across a cluster of multiple Sails/Node.js servers and/or processes. *
* (See http://bit.ly/redis-session-config for more info.) *
* *
* > While @sailshq/connect-redis is a popular choice for Sails apps, many *
* > other compatible packages (like "connect-mongo") are available on NPM. *
* > (For a full list, see https://sailsjs.com/plugins/sessions) *
* *
***************************************************************************/
// adapter: '@sailshq/connect-redis',
// url: 'redis://user:password@localhost:6379/databasenumber',
//--------------------------------------------------------------------------
// /\ OR, to avoid checking it in to version control, you might opt to
// || set sensitive credentials like this using an environment variable.
//
// For example:
// ```
// sails_session__url=redis://admin:myc00lpAssw2D@bigsquid.redistogo.com:9562/0
// ```
//
//--------------------------------------------------------------------------
/***************************************************************************
* *
* Production configuration for the session ID cookie. *
* *
* Tell browsers (or other user agents) to ensure that session ID cookies *
* are always transmitted via HTTPS, and that they expire 24 hours after *
* they are set. *
* *
* Note that with `secure: true` set, session cookies will _not_ be *
* transmitted over unsecured (HTTP) connections. Also, for apps behind *
* proxies (like Heroku), the `trustProxy` setting under `http` must be *
* configured in order for `secure: true` to work. *
* *
* > While you might want to increase or decrease the `maxAge` or provide *
* > other options, you should always set `secure: true` in production *
* > if the app is being served over HTTPS. *
* *
* Read more: *
* https://sailsjs.com/config/session#?the-session-id-cookie *
* *
***************************************************************************/
cookie: {
// secure: true,
maxAge: 24 * 60 * 60 * 1000, // 24 hours
},
},
/**************************************************************************
* *
* Set up Socket.io for your production environment. *
* *
* (https://sailsjs.com/config/sockets) *
* *
* > If you have disabled the "sockets" hook, then you can safely remove *
* > this section from your `config/env/production.js` file. *
* *
***************************************************************************/
sockets: {
/***************************************************************************
* *
* Uncomment the `onlyAllowOrigins` whitelist below to configure which *
* "origins" are allowed to open socket connections to your Sails app. *
* *
* > Replace "https://example.com" etc. with the URL(s) of your app. *
* > Be sure to use the right protocol! ("http://" vs. "https://") *
* *
***************************************************************************/
// onlyAllowOrigins: [
// 'https://example.com',
// 'https://staging.example.com',
// ],
/***************************************************************************
* *
* If you are deploying a cluster of multiple servers and/or processes, *
* then uncomment the following lines. This tells Socket.io about a Redis *
* server it can use to help it deliver broadcasted socket messages. *
* *
* > Be sure a compatible version of @sailshq/socket.io-redis is installed! *
* > (See https://sailsjs.com/config/sockets for the latest version info) *
* *
* (https://sailsjs.com/docs/concepts/deployment/scaling) *
* *
***************************************************************************/
// adapter: '@sailshq/socket.io-redis',
// url: 'redis://user:password@bigsquid.redistogo.com:9562/databasenumber',
//--------------------------------------------------------------------------
// /\ OR, to avoid checking it in to version control, you might opt to
// || set sensitive credentials like this using an environment variable.
//
// For example:
// ```
// sails_sockets__url=redis://admin:myc00lpAssw2D@bigsquid.redistogo.com:9562/0
// ```
//--------------------------------------------------------------------------
},
/**************************************************************************
* *
* Set the production log level. *
* *
* (https://sailsjs.com/config/log) *
* *
***************************************************************************/
log: {
level: 'debug',
},
http: {
/***************************************************************************
* *
* The number of milliseconds to cache static assets in production. *
* (the "max-age" to include in the "Cache-Control" response header) *
* *
***************************************************************************/
cache: 365.25 * 24 * 60 * 60 * 1000, // One year
/***************************************************************************
* *
* Proxy settings *
* *
* If your app will be deployed behind a proxy/load balancer - for example, *
* on a PaaS like Heroku - then uncomment the `trustProxy` setting below. *
* This tells Sails/Express how to interpret X-Forwarded headers. *
* *
* This setting is especially important if you are using secure cookies *
* (see the `cookies: secure` setting under `session` above) or if your app *
* relies on knowing the original IP address that a request came from. *
* *
* (https://sailsjs.com/config/http) *
* *
***************************************************************************/
// trustProxy: true,
},
/**************************************************************************
* *
* Lift the server on port 80. *
* (if deploying behind a proxy, or to a PaaS like Heroku or Deis, you *
* probably don't need to set a port here, because it is oftentimes *
* handled for you automatically. If you are not sure if you need to set *
* this, just try deploying without setting it and see if it works.) *
* *
***************************************************************************/
// port: 80,
/**************************************************************************
* *
* Configure an SSL certificate *
* *
* For the safety of your users' data, you should use SSL in production. *
* ...But in many cases, you may not actually want to set it up _here_. *
* *
* Normally, this setting is only relevant when running a single-process *
* deployment, with no proxy/load balancer in the mix. But if, on the *
* other hand, you are using a PaaS like Heroku, you'll want to set up *
* SSL in your load balancer settings (usually somewhere in your hosting *
* provider's dashboard-- not here.) *
* *
* > For more information about configuring SSL in Sails, see: *
* > https://sailsjs.com/config/*#?sailsconfigssl *
* *
**************************************************************************/
// ssl: undefined,
/**************************************************************************
* *
* Production overrides for any custom settings specific to your app. *
* (for example, production credentials for 3rd party APIs like Stripe) *
* *
* > See config/custom.js for more info on how to configure these options. *
* *
***************************************************************************/
custom: {
baseUrl: 'https://example.com',
internalEmailAddress: 'support@example.com',
// mailgunDomain: 'mg.example.com',
// mailgunSecret: 'key-prod_fake_bd32301385130a0bafe030c',
// stripeSecret: 'sk_prod__fake_Nfgh82401348jaDa3lkZ0d9Hm',
//--------------------------------------------------------------------------
// /\ OR, to avoid checking them in to version control, you might opt to
// || set sensitive credentials like these using environment variables.
//
// For example:
// ```
// sails_custom__mailgunDomain=mg.example.com
// sails_custom__mailgunSecret=key-prod_fake_bd32301385130a0bafe030c
// sails_custom__stripeSecret=sk_prod__fake_Nfgh82401348jaDa3lkZ0d9Hm
// ```
//--------------------------------------------------------------------------
},
};
My lack of knowledge about ORM doesn’t get me far. When trying to lift, the app crashes as it is trying to connect to the database. Any solutions? in #4069 there seemed to be a similar problem, But I’m confused on how to fix the error.
Thanks in advance!
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 16
I fixed this issue by running my mongod process on my local machine before trying to lift my sails app. I think the error message is really misleading.
never mind, mongod and mongodb are different services. closed!
@garritfra, i had a similiar problem, just like #4069, it was just an invalid mapping over one of my model class, which leads to this weird error message.