2016-11-01 50 views
0

我有一個Apostrophe-CMS的實例,我正試圖部署到生產當前。運行sudo npm start工作正常,應用程序啓動。然而,當我嘗試有PM2守護進程運行它,我得到一個符號鏈接錯誤:開始在生產中使用pm2的節點應用程序問題

Error: EEXIST: file already exists, symlink '/var/sites/hackday-2016-microsite/node_modules/apostrophe/lib/modules/apostrophe-assets/public' -> '/var/sites/hackday-2016-microsite/public/modules/apostrophe-assets' hackday2016-28 at Error (native) hackday2016-28 at Object.fs.symlinkSync (fs.js:1048:18) hackday2016-28 at Object.self.linkAssetFolderOnUnix (/var/sites/hackday-2016-microsite/node_modules/apostrophe/lib/modules/apostrophe-assets/index.js:447:10) hackday2016-28 at Object.self.linkAssetFolder (/var/sites/hackday-2016-microsite/node_modules/apostrophe/lib/modules/apostrophe-assets/index.js:424:14) hackday2016-28 at /var/sites/hackday-2016-microsite/node_modules/apostrophe/lib/modules/apostrophe-assets/index.js:402:14 hackday2016-28 at /var/sites/hackday-2016-microsite/node_modules/lodash/index.js:3073:15 hackday2016-28 at baseForOwn (/var/sites/hackday-2016-microsite/node_modules/lodash/index.js:2046:14) hackday2016-28 at /var/sites/hackday-2016-microsite/node_modules/lodash/index.js:3043:18 hackday2016-28 at Function.<anonymous> (/var/sites/hackday-2016-microsite/node_modules/lodash/index.js:3346:13) hackday2016-28 at self.symlinkModules (/var/sites/hackday-2016-microsite/node_modules/apostrophe/lib/modules/apostrophe-assets/index.js:398:9) hackday2016-28 at /var/sites/hackday-2016-microsite/node_modules/async/lib/async.js:718:13 hackday2016-28 at iterate (/var/sites/hackday-2016-microsite/node_modules/async/lib/async.js:262:13) hackday2016-28 at async.forEachOfSeries.async.eachOfSeries (/var/sites/hackday-2016-microsite/node_modules/async/lib/async.js:281:9) hackday2016-28 at _parallel (/var/sites/hackday-2016-microsite/node_modules/async/lib/async.js:717:9) hackday2016-28 at Object.async.series (/var/sites/hackday-2016-microsite/node_modules/async/lib/async.js:739:9) hackday2016-28 at Object.self.afterInit (/var/sites/hackday-2016-microsite/node_modules/apostrophe/lib/modules/apostrophe-assets/index.js:349:20)

+0

嗯,澄清的問題?您是否在使用pm2同時啓動多個實例並進行負載平衡?這並不壞,但它與我接下來的建議有關。 –

+0

PM2正在管理單個服務器上的多個節點應用程序,但只有一個撇號應用程序實例。 – jerikojones

+0

這可能是一個權限問題,如果運行撇號的用戶沒有權限執行,因爲它在公共/模塊中看起來合適。也可能是pm2被配置爲運行多個進程以實現負載平衡,這正是我之前所提到的。建議在部署之後和啓動服務器進程之前運行「節點應用程序撇號:生成」。這可以避免競爭條件。 –

回答

0

我非常新的ApostropheCMS過,並已被玩弄了一段時間。它看起來像創建一個符號鏈接來將撇號資產文件夾鏈接到公共文件夾?我不明白需要這樣做。 AposCMS在

node_modules /撇號/ lib/modules目錄/撇號資產/公共和

在/ var /網站/ hackday-2016微型/公/模塊/撇號資產的文件夾自動拾取所有資產。

所有你需要做的就是 /var/sites/hackday-2016-microsite/lib/modules/apostrophe-pages/index.js

下確保您聲明要添加爲您的項目資產

這裏是我在我的文件

module.exports = { 
     park: [{ 
      slug: '/search', 
      type: 'apostrophe-search', 
      label: 'Search', 
      published: true 
     }], 
     types: [{ 
       name: 'default', 
       label: 'Default' 
      }, 
      { 
       name: 'home', 
       label: 'Home' 
      }, 
      { 
       name: 'apostrophe-blog-page', 
       label: 'Blog' 
      } 
     ], 

    //construct is one of the nunjucks functions that gets called when app.js starts 
    construct: function(self, options) { 

     //push assets to for use in front end - e.g. lib/modules/apostrophe-pages/public/js/site.js 

     self.pushAsset('script', 'site', { scene: 'always' }); 
     self.pushAsset('script', 'jquery.easing', { scene: 'always' }); 
     self.pushAsset('script', 'jquery.scrollTo', { scene: 'always' }); 
     self.pushAsset('script', 'bootstrap', { scene: 'always' }); 
     self.pushAsset('script', 'jquery.easing', { scene: 'always' }); 
     self.pushAsset('script', 'jquery.matchHeight', { scene: 'always' }); 
     self.pushAsset('script', 'jquery.easy-autocomplete', { scene: 'always' }); 
    } 
}; 

而且添加的CSS文件的代碼,你可以做下

在/ var /網站/ hackday-2016微型/公/模塊/apostrophe-assets/public/css/site.less 我的代碼中的文件是:

@import 'utilities/_index.less'; 
@import 'typography/_index.less'; 
@import 'layout/_index.less'; 
@import 'templates/_index.less'; 
@import 'components/_index.less'; 
@import 'global/_index.less'; 
@import 'components/easy-autocomplete.less'; 
@import 'components/easy-autocomplete.themes.less'; 
// this is the place were we are adding the css syles so that they get automatically compiled 
// and are minified and send out as one file 
@import 'custom/bootstrap.less'; 
@import 'custom/font-awesome.less'; 
@import 'custom/jquery.autocomplete.less'; 
@import 'custom/simple-sidebar.less'; 
@import 'custom/style.less'; 

.apos-slideshow-item 
{ 
    h4 
    { 
    display: none; 
    } 
} 
相關問題