ImageMagic在本地工作,而不在内部工作

时间:2019-07-16 10:19:52

标签: javascript imagemagick next.js pm2

我在项目中使用ImageMagic。我没有为此安装其他任何东西。 它在本地工作。

我目前创建了三个对象,但是并不总是创建图像,仅在构建时就不会在本地出现此类问题(yarn dev)。结果就是产品。

第1步

item = await Item.createObject(user, template);

第2步

...
public static async createObject(...) {
...
    for(...) {
        result = await this.createInstance(user, template);
        ...
    }
}

第3步

private static async createInstance(user, template) {
    ...
    const { imgName, description } = await Image.imageMagicCreate(...);
}

第4步

import * as shell from 'shelljs';
import * as fs from 'fs';
import * as appRoot from 'app-root-path';

// itemId - input data;

class Image {
public async imageMagicCreate(data: IMagicData) {

const userFolder = './uploads/' + user.userName;
const baseImage = appRoot.path + '/static/template.png';
if (!fs.existsSync(userFolder)) {
    fs.mkdirSync(userFolder);
}
const itemsFolder = userFolder + '/items';
if (!fs.existsSync(itemsFolder)) {
    fs.mkdirSync(itemsFolder);
}
const thumbsFolder = userFolder + '/thumbs/items';
if (!fs.existsSync(thumbsFolder)) {
    fs.mkdirSync(thumbsFolder);
}

shell.exec(
   `convert ${baseImage} -resize 420x380 \
   -gravity south \
   -fill '#5e6e87' -font Bookman-LightItalic -pointsize 14 -annotate +0+165 '${txtPart1}' \
    -fill '#5e6e87' -font Bookman-LightItalic -pointsize 14 -annotate +0+140 '${txtPart2}' \
    -fill '#5e6e87' -font Bookman-LightItalic -pointsize 14 -annotate +0+115 '${txtPart3}' \
    ${itemsFolder}/${itemId}.png`,
    {async: true},
    () => log('item created successfully'),
);

shell.exec(
   `convert ${baseImage} -resize 420x380 \
   -gravity south \
   -fill '#5e6e87' -font Bookman-LightItalic -pointsize 14 -annotate +0+165 '${txtPart1}' \
    -fill '#5e6e87' -font Bookman-LightItalic -pointsize 14 -annotate +0+140 '${txtPart2}' \
    -fill '#5e6e87' -font Bookman-LightItalic -pointsize 14 -annotate +0+115 '${txtPart3}' \
    ${thumbsFolder}/${itemId}.png`,
    {async: true},
    () => log('thumbnail created successfully'),
);
}
}

return {
     imgName: `${itemId}.png`,
     description,
};

在本地可以正常工作,但是如果我确实进行过构建,则无法正确执行工作,而不是从命令开始:

pm2 start ./eco.system....

我必须绘制6张图像,3张大3400 * 2600像素和3张缩略图420 * 360px。所有缩略图都被绘制,然后不是全部,然后是一张大图片,第二张被裁剪了,第三张是一个空文件,那么它根本就没有了……好像没有时间来绘制,但是好像是{async:true}设置。

日志:

0|MyProject  | (node:17046) DeprecationWarning: collection.count is deprecated, and will be removed in a future version. Use collection.countDocuments or collection.estimatedDocumentCount instead
PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting
PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting
PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting
PM2          | Stopping app:MyProject id:0
PM2          | Stopping app:MyProject id:1
PM2          | [Watch] Process name MyProject is being stopped so I won't restart it
PM2          | [Watch] Process name MyProject is being stopped so I won't restart it
PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting
PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting
PM2          | [Watch] Process name MyProject is being stopped so I won't restart it
PM2          | [Watch] Process name MyProject is being stopped so I won't restart it
PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting
PM2          | [Watch] Process name MyProject is being stopped so I won't restart it
PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting
PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting
PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting
PM2          | [Watch] Process name MyProject is being stopped so I won't restart it
PM2          | [Watch] Process name MyProject is being stopped so I won't restart it
PM2          | [Watch] Process name MyProject is being stopped so I won't restart it
PM2          | App name:MyProject id:1 disconnected
PM2          | App [MyProject:1] exited with code [0] via signal [SIGINT]
PM2          | App name:MyProject id:0 disconnected
PM2          | App [MyProject:0] exited with code [0] via signal [SIGINT]
PM2          | pid=17056 msg=process killed
PM2          | App [MyProject:1] starting in -cluster mode-
PM2          | pid=17046 msg=process killed
PM2          | App [MyProject:0] starting in -cluster mode-
PM2          | App [MyProject:1] online
PM2          | Stopping app:MyProject id:2
PM2          | App name:MyProject id:2 disconnected
PM2          | App [MyProject:2] exited with code [0] via signal [SIGINT]
PM2          | App [MyProject:0] online
PM2          | Stopping app:MyProject id:3
PM2          | pid=17073 msg=process killed
PM2          | App [MyProject:2] starting in -cluster mode-
PM2          | App name:MyProject id:3 disconnected
PM2          | App [MyProject:3] exited with code [0] via signal [SIGINT]
PM2          | pid=17083 msg=process killed
PM2          | App [MyProject:3] starting in -cluster mode-
PM2          | App [MyProject:2] online
PM2          | App [MyProject:3] online

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

总的来说,我发现了问题所在。 所有代码都是正确的,问题出在这里,日志写给了我,但我不理解他们=(

PM2          | Change detected on path uploads/K0FuL5m0_/certificates/SQ-A000000219.png for app MyProject - restarting

在eco.system文件中,必须将选项watch从true更改为false。 here描述了类似的问题。