Invalid cloud configuration

I'm new to keystone and trying to deploy a simple site template to familiarize myself with the technology, I downloaded all unclassified modules and created a keystone.js file and a package.json file with all dependencies. However, when I try to run keystone.js in the terminal, I get this:

 Error: Invalid Configuration

 CloudinaryImage fields (Gallery.heroImage) require the "cloudinary config" option to be set.

 See for more information.


I set up an account with the cloud and used npm install to ensure it gets installed on the system, but it clearly can't find the config. I guess there is a simple solution for this and I just have to put my config fields in the right place in the code, but I can't find any instructions on where to insert my account details. Any help would be appreciated and let me know if I've omitted any important code.



    // Require keystone
   var keystone = require('keystone'),
handlebars = require('express3-handlebars');

    // Initialise Keystone with your project configuration.
   // See for available options
   // and documentation.


'name': 'Tech Website',
'brand': 'Tech Website',

'less': 'public',
'static': 'public',
'favicon': 'public/favicon.ico',
'views': 'templates/views',
'view engine': 'hbs',

'custom engine': handlebars.create({
    layoutsDir: 'templates/views/layouts',
    partialsDir: 'templates/views/partials',
    defaultLayout: 'default',
    helpers: new require('./templates/views/helpers')(),
    extname: '.hbs'

'auto update': true,
'session': true,
'auth': true,
'user model': 'Yes',
'cookie secret': 'pUO>=q^~Z.h]~pO"k;:]dTcTb:6pT3Xyassxdk>9K]7J0MGqSWWr;$rs6lG<XLdB'


    // Load your project Models


    // Setup common locals for your templates. The following are required for the
   // bundled templates and layouts. Any runtime locals (that should be set uniquely
  // for each request) should be added to ./routes/middleware.js

keystone.set('locals', {
_: require('underscore'),
env: keystone.get('env'),
utils: keystone.utils,
editable: keystone.content.editable

    // Load your project Routes

    keystone.set('routes', require('./routes'));

    // Setup common locals for your emails. The following are required by Keystone's
    // default email templates, you may remove them if you're using your own.

    // Configure the navigation bar in Keystone Admin UI

    keystone.set('nav', {
'posts': ['posts', 'post-categories'],
'galleries': 'galleries',
'enquiries': 'enquiries',
'yes': 'yes'

// Start Keystone to connect to your database and initialise the web server




 "name": "tech-website",
  "version": "0.0.0",
  "private": true,
  "dependencies": {
  "keystone": "~0.2.27",
  "async": "~0.9.0",
  "underscore": "~1.7.0",
  "moment": "~2.8.1",
  "express3-handlebars": "~0.5.0",
  "handlebars": "^2.0.0-alpha.2",
  "dotenv": "0.4.0"
  "devDependencies": {
  "grunt": "~0.4.4",
  "grunt-express-server": "~0.4.17",
  "grunt-contrib-watch": "~0.6.1",
  "grunt-contrib-jshint": "~0.7.1",
  "jshint-stylish": "~0.1.3",
  "load-grunt-tasks": "~0.4.0",
  "grunt-node-inspector": "~0.1.5",
  "time-grunt": "~0.3.1",
  "grunt-concurrent": "~0.5.0",
  "grunt-nodemon": "~0.2.1",
  "open": "0.0.5"
  "engines": {
  "node": ">=0.10.22",
  "npm": ">=1.3.14"
"scripts": {
"start": "node keystone.js"
"main": "keystone.js"



source to share

3 answers

There are several ways to customize Cloudinary

in a KeystoneJS application.

One option is to set an environment variable CLOUDINARY_URL

. You can do this in your .env

file as you are using dotenv




A second alternative would be to install cloudinary config

Keystonejs in your application.

You can do it either in your keystone.init()

    'cloudinary config': 'cloudinary://api_key:api_secret@cloud_name',


... or using the method keystone.set()


keystone.set('cloudinary config', 'cloudinary://api_key:api_secret@cloud_name' );


All of this is detailed on the KeystonsJS configuration page .



Adding something -

Ok, what actually worked for me when I placed the config setting part in

part of keystone.init. using setters didn't work for me.

    'cloudinary config': 'cloudinary://api_key:api_secret@cloud_name',


The above code is the only one that worked flawlessly.



This is how I turned to the hero. In keystone.js add a block for using environment variables:

if (keystone.get('env') == 'production'){
    keystone.set('cloudinary config', process.env.CLOUDINARY_URL);
    keystone.set('cookie secret', process.env.COOKIE_SECRET);
    keystone.set('mandrill api key', process.env.MANDRILL_API_KEY);


Then set environment variables on the heroku instance via the command line:

$ heroku config:set MANDRILL_API_KEY=YOUR_API_KEY
$ heroku config:set CLOUDINARY_URL=cloudinary://api_key:api_secret@cloud_name
$ heroku config:set NODE_ENV=production




All Articles