0

I have a parent Express app, and a Ghost app as a child app, using Ghost as an npm module here.

I routed Ghost to be rendered at http://localhost:9000/blog. All the configuration works fine (Ghost will throw an error if the basic configuration isn't being provided correctly).

Here is my Ghost startup code

ghost({
  config: path.join(__dirname, '/config/ghost.config.js')
}).then(function (ghostServer) {
  app.use(ghostServer.config.paths.subdir, ghostServer.rootApp);
  ghostServer.start(app);
});

here is my Ghost config

// # Ghost Configuration
// Setup your Ghost install for various [environments](http://support.ghost.org/config/#about-environments).

// Ghost runs in `development` mode by default. Full documentation can be found at http://support.ghost.org/config/

var path = require('path'),
    config;

config = {
    // ### Production
    // When running Ghost in the wild, use the production environment.
    // Configure your URL and mail settings here
    production: {
        url: 'http://my-ghost-blog.com',
        mail: {},
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost.db')
            },
            debug: false
        },

        server: {
            host: '127.0.0.1',
            port: '2368'
        }
    },

    // ### Development **(default)**
    development: {
        // The url to use when providing links to the site, E.g. in RSS and email.
        // Change this to your Ghost blog's published URL.
        url: 'http://localhost:9000/blog/',

        // Example mail config
        // Visit http://support.ghost.org/mail for instructions
        // ```
        //  mail: {
        //      transport: 'SMTP',
        //      options: {
        //          service: 'Mailgun',
        //          auth: {
        //              user: '', // mailgun username
        //              pass: ''  // mailgun password
        //          }
        //      }
        //  },
        // ```

        // #### Database
        // Ghost supports sqlite3 (default), MySQL & PostgreSQL
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '../blog/data/ghost-dev.db')
            },
            debug: false
        },
        // #### Server
        // Can be host & port (default), or socket
        server: {
            // Host to be passed to node's `net.Server#listen()`
            host: '127.0.0.1',
            // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
            port: '9000'
        },
        // #### Paths
        // Specify where your content directory lives
        paths: {
            contentPath: path.join(__dirname, '../blog/')
        }
    },

    // **Developers only need to edit below here**

    // ### Testing
    // Used when developing Ghost to run tests and check the health of Ghost
    // Uses a different port number
    testing: {
        url: 'http://127.0.0.1:2369',
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost-test.db')
            }
        },
        server: {
            host: '127.0.0.1',
            port: '2369'
        },
        logging: false
    },

    // ### Testing MySQL
    // Used by Travis - Automated testing run through GitHub
    'testing-mysql': {
        url: 'http://127.0.0.1:2369',
        database: {
            client: 'mysql',
            connection: {
                host     : '127.0.0.1',
                user     : 'root',
                password : '',
                database : 'ghost_testing',
                charset  : 'utf8'
            }
        },
        server: {
            host: '127.0.0.1',
            port: '2369'
        },
        logging: false
    },

    // ### Testing pg
    // Used by Travis - Automated testing run through GitHub
    'testing-pg': {
        url: 'http://127.0.0.1:2369',
        database: {
            client: 'pg',
            connection: {
                host     : '127.0.0.1',
                user     : 'postgres',
                password : '',
                database : 'ghost_testing',
                charset  : 'utf8'
            }
        },
        server: {
            host: '127.0.0.1',
            port: '2369'
        },
        logging: false
    }
};

module.exports = config;

So basically, when I go to http://localhost:9000/blog, it isn't being rendered at all. Nothing. I was using Chrome and also testing it using Safari. Also tested those two without JavaScript turned on.

And then I try to do curl http://localhost:9000/blog, and try using a requester app (like Postman) and they returned the correct html string. I also tried to do a curl using the user agent as Chrome and as Safari, it also returns the correct html.

I traced down to ghost node_modules, and the renderer is in ghost > core > server > controllers > frontend > index.js in this line res.render(view, result)

I changed the res.render to be like this

res.render(view, result, function(err, string) {
                  console.log("ERR", err);

                  console.log("String", string);

                  res.send(string);
                })

and there is no error, it logs the current string, but it doesn't render anything on the browser.

I tried curl, postman, works, but browser doesn't work.

then I tried to send a hello world string, it works, the browser rendered it.

Then I add the string length one by one, and it turns out, any str.length < 1023 will be able to be rendered by the browser, but once it get past that, it doesn't.

And I tried in my parent Express app, it is able to send string which length is more than 1023, and if I use the ghost module as a standalone, it also able to send string more than 1023.

So something must have happened between those two, but I don't know how to debug this.

Please help

Christian Sakai
  • 929
  • 3
  • 9
  • 25
  • What version of node, express, and ghost are you using ? – Cyrbil Dec 14 '15 at 17:03
  • I have trouble reproducing the bug. Can you show how you instantiate your express app, and your ghost config ? – Cyrbil Dec 14 '15 at 17:06
  • node 4.2.3, express 4.13.3, ghost 0.7.2, this was a project I started back in the january using generator-angular-fullstack (yeoman), and I tried the latest update on that generator, it works fine. I'm having trouble reproducing the bug also. – Christian Sakai Dec 14 '15 at 17:13
  • I instantiate my express app using grunt-express-server. Ghost config is taken from the example, but I'll update my question up there to include it – Christian Sakai Dec 14 '15 at 17:14
  • okay, so it works! I commented the part in my express app where it says app.use(require('connect-livereload')()); any idea why this is doing that? – Christian Sakai Dec 14 '15 at 17:25
  • No idea, I see nothing by rapidly inspect the source code of the module that can induce this error. Maybe this [issue](https://github.com/intesso/connect-livereload/issues/39) is related. Maybe post an issue yourself to get some help from the devs directly. Best luck. – Cyrbil Dec 15 '15 at 08:44
  • yeah. thanks Cyrbil! – Christian Sakai Dec 15 '15 at 16:12

0 Answers0