【问题标题】:Run Node with Sails from another directory cwd从另一个目录 cwd 运行带有 Sails 的节点
【发布时间】:2014-03-21 16:27:11
【问题描述】:

我需要能够启动我的 Node 应用程序,即使用另一个工作目录中的 Sails:

通常:node app

我需要什么:node myfolder/app

第二种方式提升服务器,但是,所有资产都不起作用。看起来他正在使用我当前的目录作为资产文件夹(没有尝试过 api 或其他任何东西),但是服务器被解除了。

发生的情况是,访问资源会返回一个Not Found

这是一个问题,还是我做错了什么?

解释我的目标:

我有一个包含多个节点应用程序的文件夹。我使用 pm2 来启动很多进程,所以,我的文件夹结构是这样的:

Apps
 |- processes.json

 | App1
   |-...

 | App2
   |-...

我需要从Apps 文件夹中启动所有应用程序,不是App1App2 文件夹中启动。但是,它不能与 Sails.js 一起正常工作。我试图从另一个工作目录只运行一个应用程序,但出现了同样的问题。

【问题讨论】:

  • 您能再描述一下您的用例吗?也就是说,为什么需要这样做?它在另一个脚本中吗?
  • @MattBakaitis 我使用的是 Mac OSX 10.9.2

标签: javascript node.js command-line sails.js


【解决方案1】:

实际上,如果您要通过进程管理器运行事物,更好的答案是更改 Sails 应用程序主文件本身的目录。也就是说,在App1/app.js 文件的顶部,放:

process.chdir(__dirname);

这样您就不会启动不同的流程,流程管理器将能够以预期的方式监控输出、日志等。

不确定默认情况下在 Sails 中是否是一件好事,但我们会调查一下!

【讨论】:

  • 我在做同样的事情!谢谢你的回答虽然=)
  • 你是神。当我将项目拆分为前端和后端并放入两个不同的文件夹中时,它尤其适用于我的情况,每个文件夹深一层。我在想我应该如何处理依赖项中的无数 cwd。谢谢你
【解决方案2】:

Sails 确实希望您从应用目录中提升服务器。但是,您始终可以编写一个包装脚本来临时更改工作目录:

process.chdir('App1');
require('child_process').exec('node app.js');

将它保存在您的主应用程序目录中为runApp1.js,然后使用您的进程管理器来运行它。

【讨论】:

  • Shame on Sails... 是否还有其他不需要向应用程序添加代码的解决方法?
  • 我将使用pm2 来管理流程。如果它开箱即用,那就更好了
  • @IvanSeidel 这是现在所有 Sails 应用程序的默认设置(process.chdir(__dirname);app.js 的顶部)。
  • 经过许多问题和限制,我已经更改为geddy.js 框架。问题少了很多......但是他们解决了它很好=)
猜你喜欢
  • 2014-01-06
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 2019-06-14
  • 2015-07-27
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
相关资源
最近更新 更多