503 error after upgrade from 2.15.0 to 2.18.1

#1

I have updated Ghost from 2.15.0 to 2.18.1 manually (because my hoster doesn’t allow the usage of the ghost-cli) and after restarting the service I got a 503 error with the default casper theme.
When I want to login to the admin panel I only can see this error message:

503 No default engine was specified and no extension was provided.

If I return back to 2.15.0 everything works again.
How can I debug and fix it?

PS: I am using “contentPath”: “/home/peleke/ghost/content/” in the config.production.json if it is important.

PPS: This is the script that I am using to update Ghost:

#!/bin/bash
#set -v
GHOSTDIR=~/ghost
PACKAGE_VERSION_OLD=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' $GHOSTDIR/current/package.json)
CURRENT_GHOST=$(curl -s https://api.github.com/repos/TryGhost/Ghost/releases | grep tag_name | head -n 1 | cut -d '"' -f 4)
CURRENT_GHOST_DOWNLOAD=$(curl -s https://api.github.com/repos/TryGhost/Ghost/releases/latest | grep browser_download_url | cut -d '"' -f 4)
CURRENT_GHOST_FILE=$(echo $CURRENT_GHOST_DOWNLOAD | sed 's:.*/::')
echo "Installierte Version von Ghost: $PACKAGE_VERSION_OLD"
echo " Verfuegbare Version von Ghost: $CURRENT_GHOST"
cd $GHOSTDIR
if [[ $CURRENT_GHOST != $PACKAGE_VERSION_OLD ]]
then
	read -r -p "Soll Ghost jetzt von Version $PACKAGE_VERSION_OLD auf $CURRENT_GHOST aktualisiert werden? [J/n] " response
	if [[ $response =~ ^([jJ][aA]|[jJ]|"")$ ]]
	then
		echo "Ghost $CURRENT_GHOST wird heruntergeladen und entpackt..."
		cd $GHOSTDIR/versions/
		curl -LOk $CURRENT_GHOST_DOWNLOAD
		unzip $GHOSTDIR/versions/$CURRENT_GHOST_FILE -d $CURRENT_GHOST
		rm $GHOSTDIR/versions/$CURRENT_GHOST_FILE
		echo "Ghost wird jetzt aktualisiert..."
		cd $GHOSTDIR/versions/$CURRENT_GHOST
		npm install --production
		echo "Die Datenbank von Ghost wird auf die neue Version migriert..."
		cd $GHOSTDIR
		NODE_ENV=production knex-migrator migrate --mgpath ./versions/$CURRENT_GHOST/
		ln -sfn $GHOSTDIR/versions/$CURRENT_GHOST $GHOSTDIR/current
		PACKAGE_VERSION=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' $GHOSTDIR/current/package.json)
		echo "Ghost wurde von Version $PACKAGE_VERSION_OLD auf Version $PACKAGE_VERSION aktualisiert und wird neu gestartet. Dies kann ein paar Sekunden dauern..."
		supervisorctl restart ghost
		supervisorctl status
		echo "Bei Fehlern Logfile ueberpruefen: 'supervisorctl tail ghost'"
		echo "Zum Zuruecksetzen auf Ghost $PACKAGE_VERSION_OLD folgenden Befehl ausführen: 'ln -sfn $GHOSTDIR/versions/$PACKAGE_VERSION_OLD $GHOSTDIR/current' und dann per 'supervisorctl restart ghost' neustarten"
	else
		echo "-> Ghost wird nicht aktualisiert"
	fi
else
	echo "-> Ghost ist bereits auf dem aktuellen Stand, keine Aktualisierung notwendig"
fi 
currentVersion doesn't update/migrate
#2

First of all: What is the reason that you don’t use our recommended stack (Ghost-CLI)?

A 503 error means that your blog is still in maintenance mode.
That either happens if your migrations are still running (but you execute knex-migrator manually) or Ghost is still generating the URLs, because of dynamic routing. How big is your database? Have you waited a bit or did you immediately roll back?

Could you please share the log with me? If possible in debug mode DEBUG=ghost:*.

#3

This error handling def needs improving. We forward the wrong error message :+1:

#4

My hoster doesn’t allow the usage of the ghost-cli and sudo, that’s why I have to update Ghost manually. Initially I have installed it like this: https://lab.uberspace.de/guide_ghost.html
This is the folder structure:
image
The config.production.json is the only file in the top ghost directory and all of my data is stored statically in ghost/content.
It could be a problem with another kind of URL
routing: ghost:services:routing:ParentRouter PreviewRouter: mountRoute for /p/:uuid/:options
I saw some of those strange URLs for a while on my blog with another theme.

Here is the output of the debug log:

[peleke7@reinmuth ghost]$ DEBUG=ghost:* node current/index.js
ghost:boot:index First requires… +0ms
ghost:config config start +180ms
ghost:config config end +31ms
ghost:boot:index Required ghost +296ms
ghost:boot:index Initialising Ghost +85ms
ghost:boot:init Default i18n done for core +448ms
ghost:boot:init Models done +122ms
ghost:services:settings:index init settings service for: [ ‘routes’ ] +0ms
ghost:models:plugins:filter custom undefined +8ms
ghost:models:plugins:filter extra undefined +0ms
ghost:models:plugins:filter enforced undefined +0ms
ghost:models:plugins:filter default undefined +0ms
ghost:settings:cache Auto updating db_hash +228ms
ghost:settings:cache Auto updating next_update_check +1ms
ghost:settings:cache Auto updating notifications +1ms
ghost:settings:cache Auto updating session_secret +0ms
ghost:settings:cache Auto updating title +0ms
ghost:settings:cache Auto updating description +0ms
ghost:settings:cache Auto updating logo +0ms
ghost:settings:cache Auto updating cover_image +0ms
ghost:settings:cache Auto updating icon +1ms
ghost:settings:cache Auto updating default_locale +0ms
ghost:settings:cache Auto updating active_timezone +0ms
ghost:settings:cache Auto updating force_i18n +0ms
ghost:settings:cache Auto updating permalinks +0ms
ghost:settings:cache Auto updating amp +0ms
ghost:settings:cache Auto updating ghost_head +0ms
ghost:settings:cache Auto updating ghost_foot +1ms
ghost:settings:cache Auto updating facebook +0ms
ghost:settings:cache Auto updating twitter +0ms
ghost:settings:cache Auto updating labs +0ms
ghost:settings:cache Auto updating navigation +0ms
ghost:settings:cache Auto updating slack +0ms
ghost:settings:cache Auto updating unsplash +1ms
ghost:settings:cache Auto updating active_theme +0ms
ghost:settings:cache Auto updating active_apps +0ms
ghost:settings:cache Auto updating installed_apps +0ms
ghost:settings:cache Auto updating is_private +0ms
ghost:settings:cache Auto updating password +0ms
ghost:settings:cache Auto updating public_hash +0ms
ghost:settings:cache Auto updating members_public_key +1ms
ghost:settings:cache Auto updating members_private_key +0ms
ghost:settings:cache Auto updating members_session_secret +0ms
ghost:settings:cache Auto updating members_subscription_settings +0ms
ghost:boot:init Settings done +0ms
ghost:themes init themes casper +1ms
ghost:themes:loader loaded one theme casper +3ms
ghost:themes Activating theme (method A on boot) casper +421ms
[2019-03-15 19:05:27] WARN Theme’s file locales/en.json not found.
ghost:boot:init Themes done +8ms
ghost:web:parent ParentApp setup start +28ms
ghost:web:api:default:app Parent API setup start +7ms
ghost:web:api:v0.1:app API v0.1 setup start +181ms
ghost:web:api:v0.1:app API v0.1 setup end +25ms
ghost:web:api:v2:content:app Content API v2 setup start +4ms
ghost:web:api:v2:content:app Content API v2 setup end +17ms
ghost:web:v2:admin:app Admin API v2 setup start +4ms
ghost:web:v2:admin:app Admin API v2 setup end +79ms
ghost:web:api:default:app Parent API setup end +1ms
ghost:web:admin:app Admin setup start +2ms
ghost:web:admin:app Admin setup end +3ms
ghost:web:site:app Site setup start +52ms
ghost:web:shared:mw:custom-redirects redirects loading +2ms
ghost:web:shared:mw:custom-redirects redirects loaded +0ms
ghost:web:site:app Helpers done +17ms
ghost:web:site:app Themes done +0ms
ghost:web:site:app Static content done +1ms
ghost:web:site:app Internal apps done +11ms
ghost:web:site:app General middleware done +1ms
ghost:services:routing:bootstrap bootstrap +7ms
ghost:web:site:app Site setup end +1ms
ghost:web:parent ParentApp setup end +1ms
ghost:boot:init Express Apps done +0ms
ghost:services:url:resources db ready. settings cache ready. +0ms
ghost:services:url:resources _fetch posts { modelName: ‘Post’,
filter: ‘visibility:public+status:published+page:false’,
exclude:
[ ‘title’,
‘mobiledoc’,
‘html’,
‘plaintext’,
‘status’,
‘amp’,
‘codeinjection_head’,
‘codeinjection_foot’,
‘meta_title’,
‘meta_description’,
‘custom_excerpt’,
‘og_image’,
‘og_title’,
‘og_description’,
‘twitter_image’,
‘twitter_title’,
‘twitter_description’,
‘custom_template’,
‘feature_image’,
‘locale’ ],
withRelated: [ ‘tags’, ‘authors’ ],
withRelatedPrimary: { primary_tag: ‘tags’, primary_author: ‘authors’ },
withRelatedFields:
{ tags: [ ‘tags.id’, ‘tags.slug’ ],
authors: [ ‘users.id’, ‘users.slug’ ] } } +1ms
ghost:services:url:resources _fetch pages { modelName: ‘Post’,
exclude:
[ ‘title’,
‘mobiledoc’,
‘html’,
‘plaintext’,
‘amp’,
‘codeinjection_head’,
‘codeinjection_foot’,
‘meta_title’,
‘meta_description’,
‘custom_excerpt’,
‘og_image’,
‘og_title’,
‘og_description’,
‘twitter_image’,
‘twitter_title’,
‘twitter_description’,
‘custom_template’,
‘feature_image’,
‘locale’,
‘tags’,
‘authors’,
‘primary_tag’,
‘primary_author’ ],
filter: ‘visibility:public+status:published+page:true’ } +4ms
ghost:services:url:resources _fetch tags { modelName: ‘Tag’,
exclude:
[ ‘description’,
‘meta_title’,
‘meta_description’,
‘parent_id’,
‘created_at’,
‘updated_at’ ],
filter: ‘visibility:public’,
shouldHavePosts: { joinTo: ‘tag_id’, joinTable: ‘posts_tags’ } } +1ms
ghost:services:url:resources _fetch authors { modelName: ‘User’,
exclude:
[ ‘bio’,
‘website’,
‘location’,
‘facebook’,
‘twitter’,
‘locale’,
‘accessibility’,
‘meta_title’,
‘meta_description’,
‘tour’ ],
filter: ‘visibility:public’,
shouldHavePosts: { joinTo: ‘author_id’, joinTable: ‘posts_authors’ } } +1ms
ghost:services:routing:ParentRouter PreviewRouter: mountRoute for /p/:uuid/:options? previewController +4ms
ghost:services:routing:ParentRouter SiteRouter: mountRouter: PreviewRouter +0ms
ghost:services:settings:settings-loader settings file found for routes +1ms
ghost:services:settings:yaml-parser YAML settings file parsed: routes.yaml +4ms
ghost:services:settings:validate api version v2 +1ms
ghost:services:routing:taxonomy-router { value: ‘/tag/:slug/’, getValue: [Function] } +1ms
ghost:services:routing:ParentRouter RSSRouter: mountRoute for /rss/ rssController +10ms
ghost:services:routing:ParentRouter RSSRouter: mountRoute for /rss/:page(\d+) rssController +1ms
ghost:services:routing:ParentRouter RSSRouter: mountRoute for /feed/ bound _redirectFeedRequest +0ms
ghost:services:routing:ParentRouter Taxonomy: mountRouter: RSSRouter at /tag/:slug/ +0ms
ghost:services:routing:ParentRouter Taxonomy: mountRoute for /tag/:slug/ channelController +1ms
ghost:services:routing:ParentRouter Taxonomy: mountRoute for /tag/:slug/page/:page(\d+) channelController +1ms
ghost:services:routing:ParentRouter Taxonomy: mountRoute for /tag/:slug/edit bound _redirectEditOption +0ms
ghost:services:url:service router.created +0ms
ghost:services:url:generator constructor [object Object] +0ms
ghost:services:url:queue add init 100 +1ms
ghost:services:url:queue add added 0 +0ms
ghost:services:routing:ParentRouter SiteRouter: mountRouter: Taxonomy +0ms
ghost:services:routing:taxonomy-router { value: ‘/author/:slug/’, getValue: [Function] } +0ms
ghost:services:routing:ParentRouter RSSRouter: mountRoute for /rss/ rssController +0ms
ghost:services:routing:ParentRouter RSSRouter: mountRoute for /rss/:page(\d+) rssController +1ms
ghost:services:routing:ParentRouter RSSRouter: mountRoute for /feed/ bound _redirectFeedRequest +0ms
ghost:services:routing:ParentRouter Taxonomy: mountRouter: RSSRouter at /author/:slug/ +0ms
ghost:services:routing:ParentRouter Taxonomy: mountRoute for /author/:slug/ channelController +0ms
ghost:services:routing:ParentRouter Taxonomy: mountRoute for /author/:slug/page/:page(\d+) channelController +0ms
ghost:services:routing:ParentRouter Taxonomy: mountRoute for /author/:slug/edit bound _redirectEditOption +0ms
ghost:services:url:service router.created +1ms
ghost:services:url:generator constructor [object Object] +0ms
ghost:services:url:queue add init 100 +0ms
ghost:services:url:queue add added 0 +0ms
ghost:services:routing:ParentRouter SiteRouter: mountRouter: Taxonomy +0ms
ghost:services:routing:collection-router CollectionRouter { value: ‘/’ } { originalValue: ‘/:slug/’,
value: ‘/:slug/’,
getValue: [Function] } +0ms
ghost:services:routing:ParentRouter CollectionRouter: mountRoute for / collectionController +2ms
ghost:services:routing:ParentRouter CollectionRouter: mountRoute for /page/:page(\d+) collectionController +0ms
ghost:services:routing:ParentRouter RSSRouter: mountRoute for /rss/ rssController +0ms
ghost:services:routing:ParentRouter RSSRouter: mountRoute for /rss/:page(\d+) rssController +0ms
ghost:services:routing:ParentRouter RSSRouter: mountRoute for /feed/ bound _redirectFeedRequest +0ms
ghost:services:routing:ParentRouter CollectionRouter: mountRouter: RSSRouter at / +1ms
ghost:services:routing:ParentRouter CollectionRouter: mountRoute for /:slug/:options(edit)?/ entryController +1ms
ghost:services:url:service router.created +0ms
ghost:services:url:generator constructor [object Object] +0ms
ghost:services:url:queue add init 100 +0ms
ghost:services:url:queue add added 0 +0ms
ghost:services:routing:ParentRouter SiteRouter: mountRouter: CollectionRouter +1ms
ghost:services:routing:static-pages-router { value: ‘/:slug/’, getValue: [Function] } +1ms
ghost:services:routing:ParentRouter StaticPagesRouter: mountRoute for /:slug/:options(edit)?/ entryController +0ms
ghost:services:url:service router.created +0ms
ghost:services:url:generator constructor [object Object] +0ms
ghost:services:url:queue add init 100 +0ms
ghost:services:url:queue add added 0 +0ms
ghost:services:routing:ParentRouter SiteRouter: mountRouter: StaticPagesRouter +1ms
ghost:services:routing:ParentRouter SiteRouter: mountRouter: AppsRouter +0ms
ghost:services:routing:bootstrap Routes: [ { route: ‘/p/:uuid/:options?’, from: ‘PreviewRouter’ },
{ route: ‘/rss/’, from: ‘RSSRouter’ },
{ route: ‘/rss/:page(\d+)’, from: ‘RSSRouter’ },
{ route: ‘/feed/’, from: ‘RSSRouter’ },
{ route: ‘/tag/:slug/’, from: ‘Taxonomy’ },
{ route: ‘/tag/:slug/’, from: ‘Taxonomy’ },
{ route: ‘/tag/:slug/page/:page(\d+)’, from: ‘Taxonomy’ },
{ route: ‘/tag/:slug/edit’, from: ‘Taxonomy’ },
{ route: ‘/rss/’, from: ‘RSSRouter’ },
{ route: ‘/rss/:page(\d+)’, from: ‘RSSRouter’ },
{ route: ‘/feed/’, from: ‘RSSRouter’ },
{ route: ‘/author/:slug/’, from: ‘Taxonomy’ },
{ route: ‘/author/:slug/’, from: ‘Taxonomy’ },
{ route: ‘/author/:slug/page/:page(\d+)’, from: ‘Taxonomy’ },
{ route: ‘/author/:slug/edit’, from: ‘Taxonomy’ },
{ route: ‘/’, from: ‘CollectionRouter’ },
{ route: ‘/page/:page(\d+)’, from: ‘CollectionRouter’ },
{ route: ‘/rss/’, from: ‘RSSRouter’ },
{ route: ‘/rss/:page(\d+)’, from: ‘RSSRouter’ },
{ route: ‘/feed/’, from: ‘RSSRouter’ },
{ route: ‘/’, from: ‘CollectionRouter’ },
{ route: ‘/:slug/:options(edit)?/’, from: ‘CollectionRouter’ },
{ route: ‘/:slug/:options(edit)?/’, from: ‘StaticPagesRouter’ } ] +0ms
ghost:boot:init initialiseServices Start… +4ms
ghost:models:plugins:filter custom undefined +1ms
ghost:models:plugins:filter extra undefined +0ms
ghost:models:plugins:filter enforced undefined +0ms
ghost:models:plugins:filter default undefined +0ms
ghost:services:apps init begin +4ms
ghost:services:routing:ParentRouter AppsRouter: mountRouter: router at /private/ +16ms
ghost:services:routing:ParentRouter AppsRouter: mountRouter: labsEnabledRouter at /subscribe/ +2ms
ghost:services:routing:ParentRouter AppsRouter: mountRouter: ampRouter at */amp/ +0ms
ghost:services:apps saving begin +2ms
ghost:services:apps saving unneeded +1ms
ghost:models:base fetched Post visibility:public+status:published+page:false +1ms
ghost:models:base fetch withRelated tags +0ms
ghost:models:base fetch withRelated authors +1ms
ghost:models:base fetched Post visibility:public+status:published+page:true +1ms
ghost:models:base No more entries found +0ms
ghost:services:url:resources fetched pages 0 +1ms
ghost:models:base fetched Tag visibility:public +2ms
ghost:services:url:resources fetched tags 1 +0ms
ghost:services:url:resources _fetch tags { modelName: ‘Tag’,
exclude:
[ ‘description’,
‘meta_title’,
‘meta_description’,
‘parent_id’,
‘created_at’,
‘updated_at’ ],
filter: ‘visibility:public’,
shouldHavePosts: { joinTo: ‘tag_id’, joinTable: ‘posts_tags’ } } +1ms
ghost:models:base fetched User visibility:public +1ms
ghost:services:url:resources fetched authors 1 +2ms
ghost:services:url:resources _fetch authors { modelName: ‘User’,
exclude:
[ ‘bio’,
‘website’,
‘location’,
‘facebook’,
‘twitter’,
‘locale’,
‘accessibility’,
‘meta_title’,
‘meta_description’,
‘tour’ ],
filter: ‘visibility:public’,
shouldHavePosts: { joinTo: ‘author_id’, joinTable: ‘posts_authors’ } } +0ms
ghost:models:plugins:filter custom status:scheduled +6ms
ghost:models:plugins:filter extra null +0ms
ghost:models:plugins:filter enforced null +1ms
ghost:models:plugins:filter default null +0ms
ghost:models:base fetched withRelated tags +31ms
ghost:models:base fetched withRelated authors +2ms
ghost:models:base attach relations Post +1ms
ghost:models:base attached relations Post +4ms
ghost:services:url:resources fetched posts 7 +0ms
ghost:services:url:resources _fetch posts { modelName: ‘Post’,
filter: ‘visibility:public+status:published+page:false’,
exclude:
[ ‘title’,
‘mobiledoc’,
‘html’,
‘plaintext’,
‘status’,
‘amp’,
‘codeinjection_head’,
‘codeinjection_foot’,
‘meta_title’,
‘meta_description’,
‘custom_excerpt’,
‘og_image’,
‘og_title’,
‘og_description’,
‘twitter_image’,
‘twitter_title’,
‘twitter_description’,
‘custom_template’,
‘feature_image’,
‘locale’ ],
withRelated: [ ‘tags’, ‘authors’ ],
withRelatedPrimary: { primary_tag: ‘tags’, primary_author: ‘authors’ },
withRelatedFields:
{ tags: [ ‘tags.id’, ‘tags.slug’ ],
authors: [ ‘users.id’, ‘users.slug’ ] } } +1ms
ghost:models:base fetched Tag visibility:public +2ms
ghost:models:base No more entries found +1ms
ghost:services:url:resources fetched tags 0 +0ms
ghost:models:base fetched User visibility:public +2ms
ghost:models:base No more entries found +0ms
ghost:services:url:resources fetched authors 0 +0ms
ghost:boot:init XMLRPC, Slack, Webhooks, Apps, Scheduling, Permissions done +3ms
ghost:boot:init Auth done +7ms
ghost:boot:init …initialiseServices End +0ms
ghost:boot:index Starting Ghost +0ms
ghost:server Starting… +0ms
ghost:server …Started +9ms
[2019-03-15 19:05:27] INFO Ghost is running in development…
[2019-03-15 19:05:27] INFO Listening on: 127.0.0.1:2368
[2019-03-15 19:05:27] INFO Url configured as: http://localhost:2368/
[2019-03-15 19:05:27] INFO Ctrl+C to shut down
[2019-03-15 19:05:27] INFO Ghost boot 2.455s
ghost:models:base fetched Post visibility:public+status:published+page:false +13ms
ghost:models:base No more entries found +0ms
ghost:services:url:resources fetched posts 0 +0ms
ghost:services:url:queue start +1ms
ghost:services:url:queue run init init 4 0 +0ms
ghost:services:url:queue execute init init 0 +0ms
ghost:services:url:generator _onInit tags +0ms
ghost:services:url:generator 1 +0ms
ghost:services:url:urls cache /tag/getting-started/ +2ms
ghost:services:url:queue executed init init 0 +0ms
ghost:services:url:queue run init init 4 1 +0ms
ghost:services:url:queue execute init init 1 +0ms
ghost:services:url:generator _onInit authors +0ms
ghost:services:url:generator 1 +0ms
ghost:services:url:urls cache /author/ghost/ +1ms
ghost:services:url:queue executed init init 1 +1ms
ghost:services:url:queue run init init 4 2 +0ms
ghost:services:url:queue execute init init 2 +0ms
ghost:services:url:generator _onInit posts +0ms
ghost:services:url:generator 7 +0ms
ghost:services:url:urls cache /themes/ +1ms
ghost:services:url:urls cache /apps-integrations/ +0ms
ghost:services:url:urls cache /organising-content/ +0ms
ghost:services:url:urls cache /admin-settings/ +1ms
ghost:services:url:urls cache /publishing-options/ +0ms
ghost:services:url:urls cache /the-editor/ +0ms
ghost:services:url:urls cache /welcome/ +0ms
ghost:services:url:queue executed init init 2 +0ms
ghost:services:url:queue run init init 4 3 +1ms
ghost:services:url:queue execute init init 3 +0ms
ghost:services:url:generator _onInit pages +0ms
ghost:services:url:generator 0 +0ms
ghost:services:url:queue executed init init 3 +0ms
ghost:services:url:queue run init init 4 4 +0ms
ghost:services:url:queue retry init init 50 +0ms
ghost:themes:loader loading themes [ ‘casper’ ] +2ms
ghost:services:url:queue run init init 4 4 +54ms
ghost:services:url:queue retry init init 55.00000000000001 +0ms
ghost:services:url:queue run init init 4 4 +62ms
ghost:services:url:queue retry init init 60.500000000000014 +0ms
ghost:services:url:queue run init init 4 4 +68ms
ghost:services:url:queue retry init init 66.55000000000003 +0ms
ghost:services:url:queue run init init 4 4 +74ms
ghost:services:url:queue retry init init 73.20500000000004 +0ms
ghost:services:url:queue run init init 4 4 +82ms
ghost:services:url:queue retry init init 80.52550000000005 +0ms
ghost:services:url:queue run init init 4 4 +90ms
ghost:services:url:queue retry init init 88.57805000000006 +0ms
ghost:services:url:queue run init init 4 4 +99ms
ghost:services:url:queue retry init init 97.43585500000007 +0ms
ghost:services:url:queue run init init 4 4 +108ms
ghost:services:url:queue ended (2) init init +0ms

#5

I can’t see any suspicious :thinking: The services end as they should.

Could you share the error in the log when you hit your site?
Thanks!

#6

This is showing up:

2019-03-15 23:44:28,660 INFO spawned: 'ghost' with pid 22920
2019-03-15 23:44:29,662 INFO success: ghost entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2019-03-15 23:44:31,984 DEBG 'ghost' stderr output:
Unhandled rejection Error: ER_BAD_FIELD_ERROR: Unknown column 'canonical_url' in 'field list'
    at Query.Sequence._packetToError (/home/peleke7/ghost/versions/2.18.1/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
    at Query.ErrorPacket (/home/peleke7/ghost/versions/2.18.1/node_modules/mysql/lib/protocol/sequences/Query.js:77:18)
    at Protocol._parsePacket (/home/peleke7/ghost/versions/2.18.1/node_modules/mysql/lib/protocol/Protocol.js:278:23)
    at Parser.write (/home/peleke7/ghost/versions/2.18.1/node_modules/mysql/lib/protocol/Parser.js:76:12)
    at Protocol.write (/home/peleke7/ghost/versions/2.18.1/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/home/peleke7/ghost/versions/2.18.1/node_modules/mysql/lib/Connection.js:91:28)
    at Socket.<anonymous> (/home/peleke7/ghost/versions/2.18.1/node_modules/mysql/lib/Connection.js:502:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
    --------------------
    at Protocol._enqueue (/home/peleke7/ghost/versions/2.18.1/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Connection.query (/home/peleke7/ghost/versions/2.18.1/node_modules/mysql/lib/Connection.js:200:25)
    at /home/peleke7/ghost/versions/2.18.1/node_modules/knex/lib/dialects/mysql/index.js:161:18
    at Promise._execute (/home/peleke7/ghost/versions/2.18.1/node_modules/bluebird/js/release/debuggability.js:313:9)
    at Promise._resolveFromExecutor (/home/peleke7/ghost/versions/2.18.1/node_modules/bluebird/js/release/promise.js:483:18)
    at new Promise (/home/peleke7/ghost/versions/2.18.1/node_modules/bluebird/js/release/promise.js:79:10)
    at Client_MySQL._query (/home/peleke7/ghost/versions/2.18.1/node_modules/knex/lib/dialects/mysql/index.js:155:12)
    at Client_MySQL.query (/home/peleke7/ghost/versions/2.18.1/node_modules/knex/lib/client.js:206:17)
    at Runner.<anonymous> (/home/peleke7/ghost/versions/2.18.1/node_modules/knex/lib/runner.js:155:36)
    at Runner.tryCatcher (/home/peleke7/ghost/versions/2.18.1/node_modules/bluebird/js/release/util.js:16:23)
    at Runner.query (/home/peleke7/ghost/versions/2.18.1/node_modules/bluebird/js/release/method.js:15:34)
    at /home/peleke7/ghost/versions/2.18.1/node_modules/knex/lib/runner.js:61:21
    at tryCatcher (/home/peleke7/ghost/versions/2.18.1/node_modules/bluebird/js/release/util.js:16:23)
    at /home/peleke7/ghost/versions/2.18.1/node_modules/bluebird/js/release/using.js:185:26
    at tryCatcher (/home/peleke7/ghost/versions/2.18.1/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/home/peleke7/ghost/versions/2.18.1/node_modules/bluebird/js/release/promise.js:512:31)

2019-03-15 23:44:32,087 DEBG 'ghost' stdout output:
[2019-03-15 22:44:32] INFO Ghost is running in production... 

2019-03-15 23:44:32,089 DEBG 'ghost' stdout output:
[2019-03-15 22:44:32] INFO Your site is now available on https://www.peleke.de/ 

2019-03-15 23:44:32,091 DEBG 'ghost' stdout output:
[2019-03-15 22:44:32] INFO Ctrl+C to shut down 

2019-03-15 23:44:32,094 DEBG 'ghost' stdout output:
[2019-03-15 22:44:32] INFO Ghost boot 3.282s 

2019-03-15 23:44:54,251 DEBG 'ghost' stdout output:
ERROR [2019-03-15 22:44:54] "GET /" 503 612ms

Site is starting up, please wait a moment then retry.

Error ID:
    f312fdb0-4773-11e9-b034-b772e41b2cde

----------------------------------------

MaintenanceError: Site is starting up, please wait a moment then retry.
    at new MaintenanceError (/home/peleke7/ghost/versions/2.18.1/node_modules/ghost-ignition/lib/errors/index.js:142:23)
    at maintenance (/home/peleke7/ghost/versions/2.18.1/core/server/web/shared/middlewares/maintenance.js:13:21)
    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)
    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)
    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)
    at filterPrivateRoutes (/home/peleke7/ghost/versions/2.18.1/core/server/apps/private-blogging/lib/middleware.js:53:20)
    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)
    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)
    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)
    at checkIsPrivate (/home/peleke7/ghost/versions/2.18.1/core/server/apps/private-blogging/lib/middleware.js:40:20)
    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)


2019-03-15 23:44:54,611 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /content/images/size/w300/2017/04/16996525_1322673454420483_1187119428672293955_n.jpg" 200 9ms

2019-03-15 23:44:54,613 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /content/images/size/w30/2018/01/Lion-1.jpg" 200 11ms

2019-03-15 23:44:54,635 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /content/images/size/w30/2017/09/smartphone-1445489_1920.jpg" 200 2ms

2019-03-15 23:44:54,639 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /content/images/size/w30/2017/08/ghost1.JPG" 200 2ms

2019-03-15 23:44:54,657 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /content/images/size/w30/2017/05/IMG_20170501_144926.jpg" 200 2ms

2019-03-15 23:44:54,664 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /content/images/size/w30/2017/04/derbr.jpg" 200 1ms

2019-03-15 23:44:54,667 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /content/images/size/w30/2016/08/once-upon-a-time.jpg" 200 2ms

2019-03-15 23:44:54,762 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /assets/scripts/main.js?v=ecf8decc0d" 200 5ms

2019-03-15 23:44:54,796 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /assets/scripts/search.js?v=ecf8decc0d" 200 4ms

2019-03-15 23:44:54,960 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:54] "GET /assets/fonts/mapache.ttf" 200 4ms

2019-03-15 23:44:55,739 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:55] "GET /content/images/size/w600/2018/01/Lion-1.jpg" 200 4ms

2019-03-15 23:44:55,742 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:55] "GET /content/images/size/w600/2017/09/smartphone-1445489_1920.jpg" 200 8ms

2019-03-15 23:44:55,799 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:55] "GET /content/images/size/w600/2017/08/ghost1.JPG" 200 2ms

2019-03-15 23:44:55,804 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:55] "GET /content/images/size/w600/2017/05/IMG_20170501_144926.jpg" 200 3ms

2019-03-15 23:44:55,820 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:55] "GET /content/images/size/w600/2017/04/derbr.jpg" 200 2ms

2019-03-15 23:44:55,826 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:55] "GET /content/images/size/w600/2016/08/once-upon-a-time.jpg" 200 1ms

2019-03-15 23:44:55,891 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:55] "GET /favicon.ico" 302 4ms

2019-03-15 23:44:55,911 DEBG 'ghost' stdout output:
INFO [2019-03-15 22:44:55] "GET /favicon.png" 200 3ms

2019-03-15 23:45:03,625 DEBG 'ghost' stdout output:
ERROR [2019-03-15 22:45:03] "GET /ghost/" 503 21ms

Site is starting up, please wait a moment then retry.

Error ID:
    f902eb40-4773-11e9-b034-b772e41b2cde

----------------------------------------

MaintenanceError: Site is starting up, please wait a moment then retry.
    at new MaintenanceError (/home/peleke7/ghost/versions/2.18.1/node_modules/ghost-ignition/lib/errors/index.js:142:23)
    at maintenance (/home/peleke7/ghost/versions/2.18.1/core/server/web/shared/middlewares/maintenance.js:13:21)
    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)
    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)
    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)
    at expressInit (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/middleware/init.js:40:5)
    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)
    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)
    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)
    at query (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/middleware/query.js:45:5)
    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)

https___www_peleke_de_production.error.log

{"name":"Log","hostname":"reinmuth.uberspace.de","pid":22920,"level":50,"req":{"meta":{"requestId":"f311c530-4773-11e9-b034-b772e41b2cde","userId":null},"url":"/","method":"GET","originalUrl":"/","params":{},"headers":{"connection":"upgrade","host":"www.peleke.de","x-forwarded-proto":"https","x-forwarded-port":"443","x-forwarded-for":"2003:cd:ef1d:7b00:ed68:a912:4c8b:ec09","x-forwarded-for-anon":"2003:cd::","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.67 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3","accept-encoding":"gzip, deflate, br","accept-language":"de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"},"body":{},"query":{}},"res":{"_headers":{"x-powered-by":"Express","cache-control":"no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0","content-type":"text/html; charset=utf-8","etag":"W/\"15ac3-cd9UPbZZyr+brWL6775wwvhfKLc\"","vary":"Accept-Encoding","content-encoding":"gzip"},"statusCode":503,"responseTime":"612ms"},"err":{"id":"f312fdb0-4773-11e9-b034-b772e41b2cde","domain":"https://www.peleke.de","code":null,"name":"MaintenanceError","statusCode":503,"level":"normal","message":"Site is starting up, please wait a moment then retry.","stack":"MaintenanceError: Site is starting up, please wait a moment then retry.\n    at new MaintenanceError (/home/peleke7/ghost/versions/2.18.1/node_modules/ghost-ignition/lib/errors/index.js:142:23)\n    at maintenance (/home/peleke7/ghost/versions/2.18.1/core/server/web/shared/middlewares/maintenance.js:13:21)\n    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)\n    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7\n    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)\n    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)\n    at filterPrivateRoutes (/home/peleke7/ghost/versions/2.18.1/core/server/apps/private-blogging/lib/middleware.js:53:20)\n    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)\n    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7\n    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)\n    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)\n    at checkIsPrivate (/home/peleke7/ghost/versions/2.18.1/core/server/apps/private-blogging/lib/middleware.js:40:20)\n    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)"},"msg":"Site is starting up, please wait a moment then retry.","time":"2019-03-15T22:44:54.251Z","v":0}
{"name":"Log","hostname":"reinmuth.uberspace.de","pid":22920,"level":50,"req":{"meta":{"requestId":"f9027610-4773-11e9-b034-b772e41b2cde","userId":null},"url":"/","method":"GET","originalUrl":"/ghost/","params":{},"headers":{"connection":"upgrade","host":"www.peleke.de","x-forwarded-proto":"https","x-forwarded-port":"443","x-forwarded-for":"2003:cd:ef1d:7b00:ed68:a912:4c8b:ec09","x-forwarded-for-anon":"2003:cd::","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.67 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3","accept-encoding":"gzip, deflate, br","accept-language":"de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"},"body":{},"query":{}},"res":{"_headers":{"x-powered-by":"Express","cache-control":"no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0","content-type":"text/html; charset=utf-8","content-length":"66","etag":"W/\"42-Ae3vPn7XweTvuBIzXGvzHIAXxp0\"","vary":"Accept-Encoding"},"statusCode":503,"responseTime":"21ms"},"err":{"id":"f902eb40-4773-11e9-b034-b772e41b2cde","domain":"https://www.peleke.de","code":null,"name":"MaintenanceError","statusCode":503,"level":"normal","message":"Site is starting up, please wait a moment then retry.","stack":"MaintenanceError: Site is starting up, please wait a moment then retry.\n    at new MaintenanceError (/home/peleke7/ghost/versions/2.18.1/node_modules/ghost-ignition/lib/errors/index.js:142:23)\n    at maintenance (/home/peleke7/ghost/versions/2.18.1/core/server/web/shared/middlewares/maintenance.js:13:21)\n    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)\n    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7\n    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)\n    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)\n    at expressInit (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/middleware/init.js:40:5)\n    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)\n    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7\n    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)\n    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)\n    at query (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/middleware/query.js:45:5)\n    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)"},"msg":"Site is starting up, please wait a moment then retry.","time":"2019-03-15T22:45:03.626Z","v":0}

https___www_peleke_de_production.log

{"name":"Log","hostname":"reinmuth.uberspace.de","pid":22920,"level":30,"msg":"Ghost is running in production... ","time":"2019-03-15T22:44:32.085Z","v":0}
{"name":"Log","hostname":"reinmuth.uberspace.de","pid":22920,"level":30,"msg":"Your site is now available on https://www.peleke.de/ ","time":"2019-03-15T22:44:32.088Z","v":0}
{"name":"Log","hostname":"reinmuth.uberspace.de","pid":22920,"level":30,"msg":"Ctrl+C to shut down ","time":"2019-03-15T22:44:32.090Z","v":0}
{"name":"Log","hostname":"reinmuth.uberspace.de","pid":22920,"level":30,"msg":"Ghost boot 3.282s ","time":"2019-03-15T22:44:32.093Z","v":0}
{"name":"Log","hostname":"reinmuth.uberspace.de","pid":22920,"level":50,"req":{"meta":{"requestId":"f311c530-4773-11e9-b034-b772e41b2cde","userId":null},"url":"/","method":"GET","originalUrl":"/","params":{},"headers":{"connection":"upgrade","host":"www.peleke.de","x-forwarded-proto":"https","x-forwarded-port":"443","x-forwarded-for":"2003:cd:ef1d:7b00:ed68:a912:4c8b:ec09","x-forwarded-for-anon":"2003:cd::","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.67 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3","accept-encoding":"gzip, deflate, br","accept-language":"de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"},"body":{},"query":{}},"res":{"_headers":{"x-powered-by":"Express","cache-control":"no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0","content-type":"text/html; charset=utf-8","etag":"W/\"15ac3-cd9UPbZZyr+brWL6775wwvhfKLc\"","vary":"Accept-Encoding","content-encoding":"gzip"},"statusCode":503,"responseTime":"612ms"},"err":{"id":"f312fdb0-4773-11e9-b034-b772e41b2cde","domain":"https://www.peleke.de","code":null,"name":"MaintenanceError","statusCode":503,"level":"normal","message":"Site is starting up, please wait a moment then retry.","stack":"MaintenanceError: Site is starting up, please wait a moment then retry.\n    at new MaintenanceError (/home/peleke7/ghost/versions/2.18.1/node_modules/ghost-ignition/lib/errors/index.js:142:23)\n    at maintenance (/home/peleke7/ghost/versions/2.18.1/core/server/web/shared/middlewares/maintenance.js:13:21)\n    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)\n    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7\n    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)\n    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)\n    at filterPrivateRoutes (/home/peleke7/ghost/versions/2.18.1/core/server/apps/private-blogging/lib/middleware.js:53:20)\n    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)\n    at /home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:284:7\n    at Function.process_params (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:335:12)\n    at next (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:275:10)\n    at checkIsPrivate (/home/peleke7/ghost/versions/2.18.1/core/server/apps/private-blogging/lib/middleware.js:40:20)\n    at Layer.handle [as handle_request] (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/peleke7/ghost/versions/2.18.1/node_modules/express/lib/router/index.js:317:13)"},"msg":"Site is starting up, please wait a moment then retry.","time":"2019-03-15T22:44:54.251Z","v":0}
#7

I think you have to review your manual steps. One of the migration scripts were not executed.

#8

Thanks for the analysis and your support.
I wonder what when wrong.
As you can see I have this command inside of my mentioned update script:

NODE_ENV=production knex-migrator migrate --init --mgpath ./versions/$CURRENT_GHOST/

Is there something else necessary?

#9

I think I found the problem but I still don’t know how to solve it because everything looks correct:

[peleke7@reinmuth ghost]$ NODE_ENV=production knex-migrator migrate init --mgpath $GHOSTDIR/versions/$CURRENT_GHOST
[2019-03-16 11:25:04] INFO Finished database migration!
[peleke7@reinmuth ghost]$ NODE_ENV=production knex-migrator migrate init --v --mgpath $GHOSTDIR/versions/$CURRENT_GHOST
[2019-03-16 11:25:10] ERROR

NAME: InternalServerError
MESSAGE: Please provide a file named MigratorConfig.js in your project root.

Somehow the --mgpath doesn’t work.

[peleke7@reinmuth ghost]$ echo $GHOSTDIR/versions/$CURRENT_GHOST
/home/peleke7/ghost/versions/2.18.1
[peleke7@reinmuth ghost]$ cd  $GHOSTDIR/versions/$CURRENT_GHOST
[peleke7@reinmuth 2.18.1]$ ls
content  Gruntfile.js  LICENSE            node_modules  package-lock.json  README.md
core     index.js      MigratorConfig.js  package.json  PRIVACY.md         yarn.lock

Without -v it just shows “Migration finished” which sounds like everything is okay.

#10

If you are making use of --v you need to provide a version to migrate to.

#11

Oh, I see, didn’t know that. I thought it would be verbose mode toggle.
What else could be the problem then?

If I run knex-migrator in debug mode everything seems to be fine as well:

[peleke7@reinmuth ghost]$ DEBUG=knex-migrator:* knex-migrator migrate init --mgpath /home/peleke7/ghost/versions/2.18.1
  knex-migrator:index Ensure Lock Table. +0ms
  knex-migrator:index Ensure Field Length. +42ms
  knex-migrator:index Ensure Unique Index. +7ms
  knex-migrator:index Lock. +4ms
  knex-migrator:utils [ '1.3',
  knex-migrator:utils   '1.4',
  knex-migrator:utils   '1.5',
  knex-migrator:utils   '1.7',
  knex-migrator:utils   '1.9',
  knex-migrator:utils   '1.13',
  knex-migrator:utils   '1.18',
  knex-migrator:utils   '1.19',
  knex-migrator:utils   '1.20',
  knex-migrator:utils   '1.21',
  knex-migrator:utils   '1.22',
  knex-migrator:utils   '1.25',
  knex-migrator:utils   '2.0',
  knex-migrator:utils   '2.2',
  knex-migrator:utils   '2.3',
  knex-migrator:utils   '2.6',
  knex-migrator:utils   '2.8',
  knex-migrator:utils   '2.13',
  knex-migrator:utils   '2.14',
  knex-migrator:utils   '2.15',
  knex-migrator:utils   '2.16',
  knex-migrator:utils   '2.17',
  knex-migrator:utils   '2.18' ] +0ms
  knex-migrator:utils [ '1-create-tables.js', '2-create-fixtures.js' ] +26ms
  knex-migrator:index Version init expected: 2 +66ms
  knex-migrator:index Version init actual: 2 +0ms
  knex-migrator:utils [ '1-post-excerpt.js' ] +1ms
  knex-migrator:index Version 1.3 expected: 1 +1ms
  knex-migrator:index Version 1.3 actual: 1 +0ms
  knex-migrator:utils [ '1-codeinjection-post.js' ] +1ms
  knex-migrator:index Version 1.4 expected: 1 +2ms
  knex-migrator:index Version 1.4 actual: 1 +0ms
  knex-migrator:utils [ '1-og-twitter-post.js' ] +1ms
  knex-migrator:index Version 1.5 expected: 1 +1ms
  knex-migrator:index Version 1.5 actual: 1 +0ms
  knex-migrator:utils [ '1-add-backup-client.js' ] +2ms
  knex-migrator:index Version 1.7 expected: 1 +1ms
  knex-migrator:index Version 1.7 actual: 1 +0ms
  knex-migrator:utils [ '1-add-permissions-redirect.js' ] +4ms
  knex-migrator:index Version 1.9 expected: 1 +4ms
  knex-migrator:index Version 1.9 actual: 1 +0ms
  knex-migrator:utils [ '1-custom-template-post.js', '2-theme-permissions.js' ] +2ms
  knex-migrator:index Version 1.13 expected: 2 +2ms
  knex-migrator:index Version 1.13 actual: 2 +0ms
  knex-migrator:utils [ '1-add-webhooks-table.js' ] +1ms
  knex-migrator:index Version 1.18 expected: 1 +1ms
  knex-migrator:index Version 1.18 actual: 1 +0ms
  knex-migrator:utils [ '1-webhook-permissions.js' ] +89ms
  knex-migrator:index Version 1.19 expected: 1 +89ms
  knex-migrator:index Version 1.19 actual: 1 +0ms
  knex-migrator:utils [ '1-remove-settings-keys.js' ] +1ms
  knex-migrator:index Version 1.20 expected: 1 +1ms
  knex-migrator:index Version 1.20 actual: 1 +0ms
  knex-migrator:utils [ '1-add-contributor-role.js' ] +4ms
  knex-migrator:index Version 1.21 expected: 1 +4ms
  knex-migrator:index Version 1.21 actual: 1 +0ms
  knex-migrator:utils [ '1-multiple-authors-DDL.js', '1-multiple-authors-DML.js' ] +2ms
  knex-migrator:index Version 1.22 expected: 2 +2ms
  knex-migrator:index Version 1.22 actual: 2 +0ms
  knex-migrator:utils [ '1-update-koenig-beta-html.js', '2-demo-post.js' ] +2ms
  knex-migrator:index Version 1.25 expected: 2 +2ms
  knex-migrator:index Version 1.25 actual: 2 +0ms
  knex-migrator:utils [ '1-rename-amp-column.js',
  knex-migrator:utils   '2-update-posts.js',
  knex-migrator:utils   '3-remove-koenig-labs.js',
  knex-migrator:utils   '4-permalink-setting.js',
  knex-migrator:utils   '5-remove-demo-post.js',
  knex-migrator:utils   '6-replace-fixture-posts.js' ] +3ms
  knex-migrator:index Version 2.0 expected: 6 +4ms
  knex-migrator:index Version 2.0 actual: 6 +0ms
  knex-migrator:utils [ '1-add-sessions-table.js',
  knex-migrator:utils   '2-add-integrations-and-api-key-tables.js',
  knex-migrator:utils   '3-insert-admin-integration-role.js',
  knex-migrator:utils   '4-insert-integration-and-api-key-permissions.js',
  knex-migrator:utils   '5-add-mobiledoc-revisions-table.js' ] +3ms
  knex-migrator:index Version 2.2 expected: 5 +2ms
  knex-migrator:index Version 2.2 actual: 5 +1ms
  knex-migrator:utils [ '1-add-webhook-columns.js',
  knex-migrator:utils   '2-add-webhook-edit-permission.js' ] +2ms
  knex-migrator:index Version 2.3 expected: 2 +1ms
  knex-migrator:index Version 2.3 actual: 2 +0ms
  knex-migrator:utils [ '1-add-webhook-permission-roles.js' ] +1ms
  knex-migrator:index Version 2.6 expected: 1 +1ms
  knex-migrator:index Version 2.6 actual: 1 +0ms
  knex-migrator:utils [ '1-add-members-table.js' ] +1ms
  knex-migrator:index Version 2.8 expected: 1 +1ms
  knex-migrator:index Version 2.8 actual: 1 +0ms
  knex-migrator:utils [ '1-remove-empty-strings.js' ] +1ms
  knex-migrator:index Version 2.13 expected: 1 +1ms
  knex-migrator:index Version 2.13 actual: 1 +0ms
  knex-migrator:utils [ '1-add-actions-table.js', '2-add-actions-permissions.js' ] +1ms
  knex-migrator:index Version 2.14 expected: 2 +1ms
  knex-migrator:index Version 2.14 actual: 2 +0ms
  knex-migrator:utils [ '1-add-type-column-to-integrations.js',
  knex-migrator:utils   '2-insert-zapier-integration.js' ] +1ms
  knex-migrator:index Version 2.15 expected: 2 +2ms
  knex-migrator:index Version 2.15 actual: 2 +0ms
  knex-migrator:utils [ '1-add-members-perrmissions.js' ] +2ms
  knex-migrator:index Version 2.16 expected: 1 +1ms
  knex-migrator:index Version 2.16 actual: 1 +0ms
  knex-migrator:utils [ '1-normalize-settings.js', '2-posts-add-canonical-url.js' ] +1ms
  knex-migrator:index Version 2.17 expected: 2 +1ms
  knex-migrator:index Version 2.17 actual: 2 +0ms
  knex-migrator:utils [ '1-restore-settings-from-backup.js' ] +2ms
  knex-migrator:index Version 2.18 expected: 1 +2ms
  knex-migrator:index Version 2.18 actual: 1 +0ms
  knex-migrator:index Unlock. +0ms
  knex-migrator:index Shutdown hook +10ms
  knex-migrator:index Destroy connection +937ms
  knex-migrator:index Destroyed connection +6ms
[2019-03-16 13:19:40] INFO Finished database migration!
#12

I have even forced Ghost to do a migration to 2.15 and after that to 2.18 again but it didn’t change anything.

#13

My assumption is that you are mixing up environments.
Please double check the database config you are using in production.
Also check the migration table in your production database.

DEBUG=knex-migrator:* knex-migrator migrate init

This is development env.

#14

I have checked that and tried it again via

$ NODE_ENV=production knex-migrator migrate --init --v 2.18 --mgpath /home/peleke7/ghost/versions/2.18.1
[2019-03-18 13:00:58] INFO Finished database migration!

I did execute this command in the main ghost directory where also the working config.production.json file is stored. It doesn’t change anything. I don’t know what else I could do to fix it.
It looks like this in the database:

#15

It’s really hard to tell from here, because I don’t know any details of your setup.
How do you start Ghost? Do you have another config.production.json in your ghost/versions/2.18.1 folder?

Which version of knex-migrator are you using?

#16

Thanks a lot for your support @Kate, I really appreciate it!

I am starting/running Ghost via supervisord:

[program:ghost]
directory=%(ENV_HOME)s/ghost
command=env NODE_ENV=production /bin/node current/index.js

There is no other config.production.json in any versions/* subfolder.

knex-migrator is up to date (3.2.5).

The whole setup/installation is explained step-by-step in this article: https://lab.uberspace.de/guide_ghost.html

An update to 2.18.2 did not change anything. If you take a look at my last screenshot: Is it normal that most of the tables have currentVersion = 2.15 while the last four have 2.18?

What else could I do to help you finding the problem?

btw: This is how URLs of posts look like (and don’t work) at the moment: https://www.peleke.de/p/88e27520-b193-476d-8625-3d7754bdf9a5/

#17

Here are some screenshots of the environment:
image
image
image

#18

Ran into this same issue when trying to update the Cloudron Ghost package from 2.16.4 to 2.18.2. The Cloudron package uses the CLI tool and runs “ghost setup migrate”. The migration succeeds and the migration table states that 2-posts-add-canonical-url of version 2.17 was run but the posts table itself does not have the canonical_url field.

Some other notes:

  • A fresh installation of 2.18.2 (with cloudron package) works fine. The posts table has the canonical_url field
  • Only update of 2.16.4 to 2.18.2 has this problem.
    • The “up” method of the 2-posts-add-canonical-url.js migration is never called but the migrations table has the entry
  • The package uses ghost-cli@1.9.9 and knex-migrator@3.2.5
  • Out of frustration, I copied the 2-posts-add-canonical-url.js file into 2.18 migration directory and ran migrate again and it created the canonical_url field!

The error after upgrading is

Migrating database
✔ Running database migrations
Starting Ghost
[2019-03-20 06:17:35] WARN Theme's file locales/en.json not found. 
Unhandled rejection Error: ER_BAD_FIELD_ERROR: Unknown column 'canonical_url' in 'field list'
    at Query.Sequence._packetToError (/home/cloudron/ghost/versions/2.17.0/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
    at Query.ErrorPacket (/home/cloudron/ghost/versions/2.17.0/node_modules/mysql/lib/protocol/sequences/Query.js:77:18)
    at Protocol._parsePacket (/home/cloudron/ghost/versions/2.17.0/node_modules/mysql/lib/protocol/Protocol.js:278:23)
    at Parser.write (/home/cloudron/ghost/versions/2.17.0/node_modules/mysql/lib/protocol/Parser.js:76:12)
    at Protocol.write (/home/cloudron/ghost/versions/2.17.0/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/home/cloudron/ghost/versions/2.17.0/node_modules/mysql/lib/Connection.js:91:28)
    at Socket.<anonymous> (/home/cloudron/ghost/versions/2.17.0/node_modules/mysql/lib/Connection.js:502:10)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at Socket.Readable.push (_stream_readable.js:208:10)
    at TCP.onread (net.js:601:20)
#19

Using the Ghost-CLI without any manual steps works.
That is probably because Ghost itself executes its migrations from inside.


I just tried to manual steps:

current/node_modules/.bin/knex-migrator-health --mgpath versions/2.18.2/

Worked.

knex-migrator-health --mgpath versions/2.18.2/

Global. Worked.

knex-migrator-health --init --mgpath versions/2.18.2/

Does not work. I guess there is a bug when using --init.

Could you please try not using --init and report back?

Thanks!

#20

I released knex-migrator 3.2.6.

Could you please re-try with --init flag too?

Thanks!