コードの変更時にSails.jsアプリを自動再読み込みしますか?


107

現在、sails.jsアプリでコードを変更sails liftする場合、変更を確認する前に、sailsサーバーを手動で停止して再実行する必要があるようです。

開発モードで実行しているときに、コードの変更を検出したときに自動的に帆サーバーを再起動する方法はあるのでしょうか。

回答:


74

あなたはforevernodemonなどのウォッチャーを使用する必要があります...

  1. 次のコマンドを実行して、永久にインストールします

    sudo npm install -g forever

  2. それを実行します:

    forever -w start app.js


Sailsが.tmpフォルダーに書き込むことによる無限の再起動を回避するため.foreverignoreに、プロジェクトディレクトリにファイルを作成し、このコンテンツを中に置くことができます。

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

GitHubの問題を参照してください: / . tmpのために再起動しません


7
.foreverignore変更をすぐに確認するために再起動する必要がないため、ビューを追加することもできます。例**/views/**
セスマラキ2014

しかし、残念ながら、これらは再度実行されるブートストラップコードとセッションの損失につながります。
rahulserver

1
これを使用しましたが、次の警告が表示されます:--minUptimeが設定されていません。デフォルトは1000msです。この変数を設定するにはどうすればよいですか?
Golinmarq

47

sails-hook-autoreloadを使用できます

通常どおりアプリを持ち上げるだけで、モデルまたはコントローラーファイルを追加/変更/削除すると、すべてのコントローラーとモデルがリロードされ、アプリを下げたり、再度持ち上げたりする必要はありません。


1
これが最も簡単で簡単な解決策のようです。npmをインストールして、サンプルautoreload.jsをconfigフォルダーに追加すれば、基本的には完了です。
Braintapper 2015年

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を使用して)保存するとき

45

たとえば、nodemonapiおよびconfigディレクトリを監視するには

.nodemonignore 内容物

views/*
.tmp/*
.git/*

.nodemonignoreの作成後にコマンドを実行します

$> nodemon -w api -w config

スーパーバイザが3つのディレクトリを無視する例

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

4
追加の構成なしでパイプがstdoutに出力を戻す方法を考えると、nodemonソリューションよりもforeverソリューションが好きnodemonです。開発ワークフローを容易にします。
アーロンランズリー2014年

コマンドについては、私はあなたの.nodemonignore例を使用して実行しましたnodemon。これまでのところ機能します。
Michael J. Calkins 14

上記の起動の実行方法(これに相当)sails liftについて混乱している人のために、nodemonは使用することを知っていますapp.js
タイラーコリアー2016年


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

同じ問題があり、sails @ betaタスクでgrunt-watchとgrunt-foreverを使用して解決しました。結果は4つの不平なコマンドです:

更新:タスクは現在のセールバージョンで利用できます(ベータ版ではなくなりました:>)

  • スタートは、サーバーを起動します
  • やめるサーバーを停止します
  • サーバーを再起動します
  • startWatchサーバーを起動し、変更を待ってサーバーを再起動します(grunt-watchを使用)。これはおそらくあなたの解決策ですが、他のコマンドも役に立ちます。

これがコードです-私は、sails @ betaを使用しています。これには、タスクディレクトリが含まれています。これが以前のバージョンに含まれているかどうかはわかりません。

  • まず、sailsディレクトリに永久にインストールする必要があります。

    npm install grunt-forever --save-dev
  • tasks / config / forever.js永久タスクを構成します。

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • tasks / config / watch.js(編集新しいルールを追加するために監視タスクを編集します

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • tasks / 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が適しています。ただし、Webストームまたは自動保存機能付きのIDEを使用している場合は、サーバーが継続的に再起動されます。
Vishnu KR

まさにビシュヌ氏
BINFAS K 2017

1

今この質問に来ている人にとっては、これはもう必要ないようです-で起動されたアプリケーション sails liftは、大まかな監視タスクが実行され、コードの変更は再起動なしで表示されます。

コンソールで何が起こっているかを示すものがないため、最初はこれが起こっていることに気づきませんでしたが、再起動しなくても機能しているようです(私はSails 0.11を使用しています)。


8
これはそうではないと思います。コントローラを変更した後も帆を再起動する必要があります
fengd

変更を確認するには、アプリを再起動する必要もあります。
user1007522
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.