Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error updating to Ghost 5.80 from 5.23, blog down, please help #19839

Open
1 task done
DigitalLeaves opened this issue Mar 12, 2024 · 1 comment
Open
1 task done

Error updating to Ghost 5.80 from 5.23, blog down, please help #19839

DigitalLeaves opened this issue Mar 12, 2024 · 1 comment
Labels

Comments

@DigitalLeaves
Copy link

Issue Summary

Hello, I just updated my Ghost blog from 5.23 to 5.80.
After the update, I tried to restart Ghost, but it fails with this message:

Ghost instance is not running! Starting...
✖ Starting Ghost
A GhostError occurred.

Message: Ghost was able to start, but errored during boot with: insert into `collections_posts` (`collection_id`, `id`, `post_id`, `sort_order`) select '65f02f0dafb7eeb96c4c90a6' as `collection_id`, '65f02f0dafb7eeb96c4c90a8' as `id`, '637a812a81cfb759fad27265' as `post_id`, 0 as `sort_order` union all select '65f02f0dafb7eeb96c4c90a6' as `collection_id`,
... (many more rows) ...
, '65314decb0c970c6a6eca545' as `post_id`, 0 as `sort_order` - SQLITE_ERROR: too many terms in compound SELECT
Context: [object Object]
Help: Error occurred while executing the following migration: 2023-07-10-05-16-55-add-built-in-collection-posts.js

Debug Information:
OS: Debian GNU/Linux, v11
Node Version: v18.19.1
Ghost Version: 5.80.2
Ghost-CLI Version: 1.25.3
Environment: development
Command: 'ghost restart'
mysql Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)

Steps to Reproduce

Start with an install of v5.23 or below 5.80
Apparently the number of posts can be a cause, so get more than 500 posts.
Run ghost update and ghost restart

Ghost Version

5.80.2

Node.js Version

v18.19.1

How did you install Ghost?

Command line

Database type

MySQL 5.7

Browser & OS version

Chrome, MacOS

Relevant log / error output

Ghost instance is not running! Starting...
✖ Starting Ghost
A GhostError occurred.

Message: Ghost was able to start, but errored during boot with: insert into `collections_posts` (`collection_id`, `id`, `post_id`, `sort_order`) select '65f03420dd3af6bb83e5ad3d' as `collection_id`, '65f03420dd3af6bb83e5ad3f' as `id`, '637a812a81cfb759fad27265' as `post_id`, 0 as `sort_order` union all select '65f03420dd3af6bb83e5ad3d' as `collection_id`, '65f03420dd3af6bb83e5ad40' as `id`, '637a812a81cfb759fad27266' as `post_id`, 0 as `sort_order` union all select '65f03420dd3af6bb83e5ad3d' as `collection_id`, '65f03420dd3af6bb83e5ad41' as `id`, '637a812a81cfb759fad27267'
... (rows ommited)...
, '65f03420dd3af6bb83e5afe3' as `id`, '65314decb0c970c6a6eca545' as `post_id`, 0 as `sort_order` - SQLITE_ERROR: too many terms in compound SELECT
Context: [object Object]
Help: Error occurred while executing the following migration: 2023-07-10-05-16-55-add-built-in-collection-posts.js

Code of Conduct

  • I agree to be friendly and polite to people in this repository
@github-actions github-actions bot added the needs:triage [triage] this needs to be triaged by the Ghost team label Mar 12, 2024
@DigitalLeaves
Copy link
Author

Ok, I managed to solve it manually. The issue is in the script 2023-07-10-05-16-55-add-built-in-collection-posts.js.

Specifically, in this function:

const insertPostCollections = async (knex, collectionId, postIds) => {
    logging.warn(`Batch inserting ${postIds.length} collection posts for collection ${collectionId}`);

    const collectionPosts = postIds.map((postId) => {
        return {
            id: (new ObjectID()).toHexString(),
            collection_id: collectionId,
            post_id: postId,
            sort_order: 0
        };
    });

    await knex.batchInsert('collections_posts', collectionPosts, 1000);
};

The problem is the batch size. I guess it does not make sense to have it set to 1000 if the maximum size for batch inserts in MySQL is 500. So lowering to 100 for example does the trick.

Now, can you kindly confirm that even by reducing the batch size to 100, all posts would be updated in the database as per the new Ghost 5.80 requirements? (looking at the code, it seems that is the case, but just want to be sure).

Thank you. A PR here would be quite easy I guess, just decreasing the limit to 100.

@daniellockyer daniellockyer added the P2 label Mar 12, 2024 — with Linear
@daniellockyer daniellockyer removed the needs:triage [triage] this needs to be triaged by the Ghost team label Mar 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants