โหลดแอป Sails.js ใหม่อัตโนมัติเมื่อมีการเปลี่ยนแปลงโค้ดหรือไม่


107

ขณะนี้ดูเหมือนว่าสำหรับการเปลี่ยนแปลงรหัสใด ๆ ในแอปพลิเคชัน sails.js คุณต้องหยุดเซิร์ฟเวอร์ใบเรือด้วยตนเองและเรียกใช้sails liftอีกครั้งก่อนจึงจะเห็นการเปลี่ยนแปลง

ฉันสงสัยว่ามีวิธีใดบ้างเมื่อทำงานในโหมดการพัฒนาเพื่อรีสตาร์ทเซิร์ฟเวอร์ sails โดยอัตโนมัติเมื่อตรวจพบการเปลี่ยนแปลงรหัส

คำตอบ:


74

คุณต้องใช้ผู้เฝ้าดูตลอดไปโนเดมอนหรืออย่างอื่น ...

ตัวอย่าง

  1. ติดตั้งตลอดไปโดยเรียกใช้:

    sudo npm install -g forever

  2. เรียกใช้:

    forever -w start app.js


เพื่อหลีกเลี่ยงการรีสตาร์ทไม่สิ้นสุดเนื่องจาก Sails เขียนลงใน.tmpโฟลเดอร์คุณสามารถสร้าง.foreverignoreไฟล์ลงในไดเร็กทอรีโปรเจ็กต์ของคุณและใส่เนื้อหานี้ไว้ภายใน:

**/.tmp/**
**/views/**
**/assets/**

ดูปัญหาบน GitHub นี้ ตลอดกาลเริ่มต้นใหม่เพราะ /.tmp


7
คุณอาจต้องการเพิ่มมุมมอง.foreverignoreเนื่องจากไม่จำเป็นต้องรีสตาร์ทเพื่อดูการเปลี่ยนแปลงทันที เช่น**/views/**
Seth Malaki

แต่น่าเสียดายที่สิ่งเหล่านี้จะนำไปสู่การเรียกใช้โค้ด bootstrap อีกครั้งและการสูญเสียเซสชัน
rahulserver

1
ฉันใช้สิ่งนี้ แต่ฉันได้รับคำเตือนต่อไปนี้: - ไม่ได้ตั้งค่านาทีเวลา ค่าเริ่มต้นเป็น: 1000ms ฉันจะตั้งค่าตัวแปรนี้ได้อย่างไร?
Golinmarq

47

คุณสามารถใช้sails-hook-autoreload

เพียงแค่ยกแอปของคุณขึ้นตามปกติและเมื่อคุณเพิ่ม / เปลี่ยนแปลง / ลบโมเดลหรือไฟล์คอนโทรลเลอร์คอนโทรลเลอร์และโมเดลทั้งหมดจะถูกโหลดซ้ำโดยไม่ต้องลด / ยกแอพใหม่


1
นี่ดูเหมือนจะเป็นทางออกที่ง่ายที่สุด / ง่ายที่สุด ติดตั้ง npm และเพิ่ม autoreload.js ตัวอย่างลงในโฟลเดอร์ config เท่านี้ก็เสร็จเรียบร้อยแล้ว
Braintapper

1
น่าทึ่งมาก ง่ายที่สุดและมีถิ่นกำเนิดมากที่สุดสำหรับ Sails
Alexus

ฉันDetails: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failถูกโยนโดย5/lib/node_modules/sails/lib/hooks/orm/index.js:221เมื่อฉันบันทึก (ใช้ใบเรือ 11.3)
Gab

45

ตัวอย่างเช่นnodemonในการดูไดเรกทอรี api และ config

.nodemonignore เนื้อหา

views/*
.tmp/*
.git/*

รันคำสั่งหลังจากสร้าง. nodemonignore

$> nodemon -w api -w config

ตัวอย่างสำหรับหัวหน้างานที่ละเว้น 3 ไดเรกทอรี

$> supervisor -i .tmp,.git,views app.js

4
ฉันชอบnodemonวิธีแก้ปัญหามากกว่าforeverวิธีแก้ปัญหาที่nodemonท่อส่งออกกลับไปที่ stdout โดยไม่มีการกำหนดค่าเพิ่มเติม ทำให้ขั้นตอนการพัฒนาง่ายขึ้น
Aaron Ransley

สำหรับคำสั่งฉันเพียงแค่ใช้ของคุณตัวอย่างและเรียกใช้.nodemonignore nodemonมันใช้งานได้แล้ว
Michael J.Calkins

สำหรับใครก็ตามที่สับสนเกี่ยวกับวิธีการเรียกใช้การเปิดตัวข้างต้น (เทียบเท่า) sails liftnodemon รู้ว่าจะใช้app.jsอย่างไร
Tyler Collier

9

หากคุณใช้ Sails 0.11 คุณสามารถติดตั้ง hook นี้เพื่อโหลดซ้ำโดยอัตโนมัติเมื่อคุณเปลี่ยนรุ่นหรือคอนโทรลเลอร์ (มุมมองไม่จำเป็นต้องโหลดซ้ำ):

npm install sails-hook-autoreload

https://www.npmjs.com/package/sails-hook-autoreload


1
คำตอบก่อนหน้านี้ของ Vitalii Maslianok ได้กล่าวไว้แล้ว
Tyler Collier

8

ติดตั้งnodemonทั่วโลกหรือในประเทศ

npm install nodemon --save
npm install nodemon -g

ติดตั้งsailsภายในโครงการของคุณดังนี้

npm install sails --save

แล้วเปลี่ยน package.json

จาก

"scripts": {
  "debug": "node debug app.js",
  "start": "node app.js"
},

ถึง

"scripts": {
   "debug": "node debug app.js",
   "start": "node app.js",
   "dev": "export NODE_ENV=development && nodemon --ignore 'tmp/*' app.js && exit 0"
},

แล้ว

npm run dev

7

ฉันมีปัญหาเดียวกันและฉันได้แก้ไขโดยใช้งาน grunt-watch และ grunt-forever ด้วยงาน sails @ beta ผลลัพธ์คือ 4 คำสั่งฮึดฮัด:

อัปเดต: งานมีให้ใช้งานในเวอร์ชัน sails ปัจจุบัน (ไม่ใช่เบต้าอีกต่อไป:>)

  • startเริ่มต้นเซิร์ฟเวอร์
  • หยุดหยุดเซิร์ฟเวอร์
  • รีสตาร์ทรีสตาร์ทเซิร์ฟเวอร์
  • startWatchเริ่มเซิร์ฟเวอร์และรอการเปลี่ยนแปลงเพื่อเริ่มการทำงานใหม่ (โดยใช้ grunt-watch) นี่อาจเป็นวิธีแก้ปัญหาของคุณ แต่คำสั่งอื่น ๆ ก็มีประโยชน์เช่นกัน

นี่คือรหัส - ฉันใช้ sails @ beta ซึ่งรวมถึงไดเรกทอรีงานฉันไม่รู้ว่าสิ่งนี้รวมอยู่ในเวอร์ชันก่อนหน้าหรือไม่:

  • ก่อนอื่นคุณต้องติดตั้งตลอดไปในไดเร็กทอรี sails ของคุณ:

    npm install grunt-forever --save-dev
  • งาน / config / forever.jsกำหนดค่างานตลอดไป

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • งาน / config / watch.js ( แก้ไข )แก้ไขงานของนาฬิกาเพื่อเพิ่มกฎใหม่

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • งาน / register / watchForever.jsลงทะเบียนงานที่คุณกำหนดเอง (ไฟล์นี้สามารถเปลี่ยนชื่อเป็นอะไรก็ได้ที่คุณต้องการ)

    module.exports = function(grunt) {
    // Starts server
      grunt.registerTask('start', [
        'compileAssets',
        'linkAssetsBuild',
        'clean:build',
        'copy:build',
        'forever:server:start'
      ]);
    
      // Restarts the server (if necessary) and waits for changes
      grunt.registerTask('startWatch', [
        'restart',
        'watch:server'
      ]);
    
      // Restarts server
      grunt.registerTask('restart', [
        'forever:server:restart'
      ]);
    
      // Stops server
      grunt.registerTask('stop', [
        'forever:server:stop'
     ]);
    };

ด้วยสิ่งนี้คุณควรจะสามารถใช้งานได้

    grunt startWatch

และทำให้เซิร์ฟเวอร์ของคุณรอให้การเปลี่ยนแปลงเริ่มต้นใหม่:>

หวังว่านี่จะช่วยได้!


6

ใช้ดีกว่า

npm install -g nodemon

ฉันกำลังใช้สิ่งนี้และมันจะช่วยปรับปรุงความเร็วในการพัฒนาของฉัน ไม่จำเป็นต้องแก้ไขไฟล์ใด ๆ สำหรับไฟล์นี้!.

หลังการติดตั้ง

nodemon app.js

Nodemon เป็นสิ่งที่ดีหากคุณต้องการรีสตาร์ทเซิร์ฟเวอร์สำหรับการบันทึกแต่ละครั้ง แต่ถ้าคุณใช้เว็บสตอร์มหรือไอเดียใด ๆ ที่มีการบันทึกอัตโนมัติระบบจะรีสตาร์ทเซิร์ฟเวอร์ของคุณต่อไป
Vishnu KR

คุณวิษณุ KR.
BINFAS K

1

สำหรับใครก็ตามที่มาถึงคำถามนี้ตอนนี้ดูเหมือนว่าจะไม่จำเป็นอีกต่อไป - แอปพลิเคชั่นที่เปิดตัวด้วยsails liftจะมีงานนาฬิกาที่ทำงานหนักและการเปลี่ยนแปลงรหัสจะปรากฏให้เห็นโดยไม่ต้องรีสตาร์ท

ฉันไม่รู้ว่าสิ่งนี้เกิดขึ้นในตอนแรกเพราะไม่มีอะไรบ่งบอกว่าเกิดอะไรขึ้นในคอนโซล แต่ดูเหมือนว่าจะทำงานได้โดยไม่ต้องรีสตาร์ท (ฉันใช้ Sails 0.11)


8
ฉันไม่คิดว่าเป็นกรณีนี้ฉันยังคงต้องรีสตาร์ทใบเรือหลังจากที่ฉันเปลี่ยนคอนโทรลเลอร์
fengd

ฉันต้องรีสตาร์ทแอพเพื่อดูการเปลี่ยนแปลงของฉัน
user1007522
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.