每当更改任何文件时,如何执行我的红隼服务器以重新启动?而不仅仅是停下来?
我尝试过
dnx --watch . kestrel
但服务器刚刚停止,我必须手动重新运行命令
我也尝试过使用 npm watch 命令,但这似乎只是绊倒了自己
watch 'dnx --watch . kestrel' .
每当更改任何文件时,如何执行我的红隼服务器以重新启动?而不仅仅是停下来?
我尝试过
dnx --watch . kestrel
但服务器刚刚停止,我必须手动重新运行命令
我也尝试过使用 npm watch 命令,但这似乎只是绊倒了自己
watch 'dnx --watch . kestrel' .
有一个命令可以用于此,称为 dnx-watch。当最初的问题被问到时,它并不存在,但在 2015 年 9 月的 beta 8 中被添加。你安装它使用
dnu commands install Microsoft.Dnx.Watcher
您只需将传递给 dnx 的命令传递给它即可运行它。所以,更换
dnx web
和
dnx-watch web
您可以在这里了解更多信息:http: //ardalis.com/get-started-with-dnx-watch
我发现以下使用 nodemon 的工作来自
https://github.com/johnpapa/aspnet5-starter-demo#dnxmon
nodemon --ext "cs,json" --exec "dnx . kestrel"
这是设计使然。今天没有开箱即用的解决方案可以在服务器停止后自动重新启动服务器,因为文件观察程序。
Visual Studio 有一些特殊的代码来监视进程并重新启动它。
但是,我们在跟踪此问题时遇到了问题,我们计划在未来的迭代中解决它。
尽管选择的解决方案更短,但这是我在驱动的角度应用程序中所做的grunt
该应用程序有一个前端和一个 api 后端。
首先有一个shell
启动api的任务:
shell: {
api:{
options: {
execOptions : {
cwd: '..\\$working_directory'
},
callback : function (err, stdout, stderr, cb) {
restartServer('shell:api',err,cb);
}
},
command: function() {
return 'dnx --watch localfarm';
}
},
在我的顶部,我gruntfile
定义了重新启动服务器的函数:
var restartServer = function (task, err, cb) {
var timeoutInSec = 30;
if (err === null)
timeoutInSec = 2;
grunt.log.write(task + ' Task ended. Retrying in ' + timeoutInSec + ' seconds');
setTimeout(function() {
grunt.log.write('retrying ' + task );
grunt.task.run(task);
cb();
}, timeoutInSec*1000); };
每次代码发生变化时,dnx --watch
进程都会自动终止。Grunt
然后等待 2 秒并重新启动该dnx
过程。如果dnx
失败,它会等待 30 秒,直到再次尝试。这让我有时间修复代码。(在我的代码版本中,我还用来beep
在重新加载 api 时获取通知。)
为了运行农场(前端和后端),我添加了一个启动多个线程的并发任务:
concurrent: {
...
farm: {
tasks: ['shell:api', 'serve'],
options: { logConcurrentOutput: true, limit: 10 }
}
...
}
此命令在 Windows 上运行得更好(如果您定义了 kestrel 命令):
nodemon --ext "cs,json" --exec "dnx --watch kestrel"
> Blockquote
C:\Users\name\YoWebApp>**nodemon --ext "cs,json" --exec "dnx . kestrel"**
6 Oct 14:46:13 - [nodemon] 1.7.1
6 Oct 14:46:13 - [nodemon] to restart at any time, enter `rs`
6 Oct 14:46:13 - [nodemon] watching: *.*
6 Oct 14:46:13 - [nodemon] starting `dnx . kestrel`
System.InvalidOperationException: Unable to load application or execute command '.'. Available commands: kestrel, web, ef, mon.
at Microsoft.Dnx.ApplicationHost.Program.ThrowEntryPointNotfoundException(DefaultHost host, String applicationName, Exception innerException)
at Microsoft.Dnx.ApplicationHost.Program.ExecuteMain(DefaultHost host, String applicationName, String[] args)
at Microsoft.Dnx.ApplicationHost.Program.Main(String[] args)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Dnx.Runtime.Common.EntryPointExecutor.Execute(Assembly assembly, String[] args, IServiceProvider serviceProvider)
at Microsoft.Dnx.Host.Bootstrapper.RunAsync(List`1 args, IRuntimeEnvironment env, FrameworkName targetFramework)
at Microsoft.Dnx.Host.RuntimeBootstrapper.ExecuteAsync(String[] args, FrameworkName targetFramework)
at Microsoft.Dnx.Host.RuntimeBootstrapper.Execute(String[] args, FrameworkName targetFramework)
6 Oct 14:46:14 - [nodemon] app crashed - waiting for file changes before starting...
6 Oct 14:46:44 - [nodemon] restarting due to changes...
6 Oct 14:46:44 - [nodemon] starting `dnx . kestrel`
System.InvalidOperationException: Unable to load application or execute command '.'. Available commands: kestrel, web, ef, mon.
at Microsoft.Dnx.ApplicationHost.Program.ThrowEntryPointNotfoundException(DefaultHost host, String applicationName, Exception innerException)
at Microsoft.Dnx.ApplicationHost.Program.ExecuteMain(DefaultHost host, String applicationName, String[] args)
at Microsoft.Dnx.ApplicationHost.Program.Main(String[] args)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Dnx.Runtime.Common.EntryPointExecutor.Execute(Assembly assembly, String[] args, IServiceProvider serviceProvider)
at Microsoft.Dnx.Host.Bootstrapper.RunAsync(List`1 args, IRuntimeEnvironment env, FrameworkName targetFramework)
at Microsoft.Dnx.Host.RuntimeBootstrapper.ExecuteAsync(String[] args, FrameworkName targetFramework)
at Microsoft.Dnx.Host.RuntimeBootstrapper.Execute(String[] args, FrameworkName targetFramework)