我们目前正在为一个客户开发一个网站(Apache下的TYPO3),该网站由node.js/socket.io应用程序提供支持,该应用程序为CMS提供的内容提供实时更新.
由于这是我们的第一个node.js项目,因此我在"完美设置"方面没有任何最佳实践,因此我花了一些时间研究部署技术.
我仍然有几个问题可以实现一个良好的设置:
易于部署客户.这一点非常重要,因为我们的网站将整合到他们的"实时"TYPO3安装中,该安装服务于大量网站,并且运行在不是由客户管理的服务器上,而是另一个(集中式)组织,它支持呼叫和服务器更改.进程缓慢.
应该很容易更新.如上所述,请求重新启动并进行服务器更改是一个缓慢的过程,因此理想情况下,节点安装应该在收到推送到实时安装的更改时重新启动/更新git.
部署
在普遍的共识似乎是使用forever,当涉及到部署节点的应用程序,防止他们逃跑.我已经测试了forever,并且在npm install forever -g(全局)安装时似乎工作正常.这需要外部协助来全局安装在实时环境中,所以我更喜欢从应用程序的node_modules目录运行它,但是我无法创建一个可靠的包装器来执行此操作.
此外,forever工作正常,但必须手动启动.什么是确保它在服务器启动时启动并保持运行的最佳方法?
init.d脚本?forever状态? 快速开发/重新启动更新
我们目前仍处于项目的开发阶段,每次我对node.js应用程序进行更改时,我都会手动重启node或forever.这有效,但远非理想.有几个较小的npm模块可以检查文件修改并node在检测到的更改时重新启动,例如:
有没有人有这些经验?
更新:你为什么不只使用群集?
该集群模块通过提供类似的功能重载机制,但不与节点0.5+工作.替换它的核心群集模块(节点0.6+)没有所有这些功能,只提供群集.而这反过来又不适合socket.io.至少没有使用Redis(这对我们来说是一个问题,因为我们不能强迫客户使用另一个先决条件服务).
-
显然,我正在尝试找到最稳定的解决方案,它将更新重启器与forever将项目交给客户之前结合起来,我真的希望有人能够生成经过验证的技术组合.
让我先从一些背景开始:
我不得不将关键的Magento网店升级到新版本.为了确保所有现有代码在升级后仍能正常工作并进行一些升级后更改,我从整个Magento安装中创建了一个Git存储库(不包括明显的内容,如4.5GB图像,./ var目录等),推送它到源并在开发服务器上克隆它.做了一个新的分支,执行了升级,更改了代码,将它全部交给了dev分支并将其推回原点.
现在是升级"真实"商店的时候了,这意味着我必须将生产服务器上的主分支与开发分支合并.然后每次都错了:
git fetch - 工作
git branch 说: * master
git merge origin/dev 可怕的错误(只在等待一段时间后输出):
fatal: Out of memory? mmap failed: Cannot allocate memory
同去的git checkout dev,git rebase master origin/dev等等.
在现有问题中对stackoverflow进行了一些研究并花了一个晚上尝试建议,包括(但不限于):
git gc
Counting objects: 48154, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (37152/37152), done.
fatal: Out of memory, malloc failed (tried to allocate 527338875 bytes)
error: failed to run repack
Run Code Online (Sandbox Code Playgroud)
和:
git repack -a -d --window-memory 10m --max-pack-size 20m …Run Code Online (Sandbox Code Playgroud) 我是 TypeScript 的新手,正在尝试将当前的 JavaScript 转换为 TypeScript。
在 JS 中我有这样的结构:
var roles = {
x: require('role.x'),
y: require('role.y')
};
Run Code Online (Sandbox Code Playgroud)
目的是稍后迭代这些角色,如下所示:
for (var index in roles) {
var role = new roles[index];
if (someObject.role == role.role) {
role.run(someObject);
}
}
Run Code Online (Sandbox Code Playgroud)
然而在 TypeScript 中,我似乎无法做到这一点:
let roles = {
x: import X from "./roles/x"
}
Run Code Online (Sandbox Code Playgroud)
哪个产量
Error:(11, 14) TS1109: Expression expected.
Error:(11, 21) TS1005: ':' expected.
Error:(11, 31) TS1005: ',' expected.
Error:(11, 36) TS1005: ':' expected.
Run Code Online (Sandbox Code Playgroud)
那么,TypeScript 相当于实现相同的方法或者更干净/TypeScript 方式的替代方法吗?