一旦Angular应用程序进入生产阶段,您如何部署它们?
到目前为止我所见过的所有指南(甚至在angular.io上)都指望服务器和browserSync的lite服务器反映变化 - 但是当你完成开发时,你如何发布应用程序?
我是否导入页面.js上的所有已编译文件index.html或使用gulp缩小它们?他们会工作吗?在生产版本中我是否完全需要SystemJS?
所以我最近发现了这个很棒的工具,它说
Docker是一个开源项目,可以从任何应用程序轻松创建轻量级,可移植,自给自足的容器.开发人员在笔记本电脑上构建和测试的容器可以在规模,生产,虚拟机,裸机,OpenStack集群,公共云等中运行.
假设我有一个运行Nginx的docker镜像,并且一个网站连接到外部数据库.如何在生产中扩展容器?
对于那些在生产中运行Go后端的人:
运行Go Web应用程序的堆栈/配置是什么?
除了使用标准库net/http包来保持服务器运行的人之外,我还没有看到很多关于这个主题的内容.我阅读使用Nginx将请求传递给Go服务器 - 带有Go的nginx
这对我来说似乎有点脆弱.例如,如果重新启动计算机,服务器将不会自动重新启动(没有其他配置脚本).
是否有更稳固的生产设置?
抛开我的意图 - 我正在为我的下一个项目计划一个Go支持的REST后端服务器,并希望确保Go能够在我投入太多资金之前实现启动项目.
目前我的网站(生产服务器)已经有很多代码.现在我想开始为我的项目使用Git并为我的团队设置一个临时服务器.任何人都可以给我任何建议吗?
这是我脑海中的画面:
Production - Production server which already have codes
?
Staging - New staging server, will install Trac too
?? ??
Developer1 Developer2 - Local development
Run Code Online (Sandbox Code Playgroud)
我的问题是,我应该如何开始?
以下是我的一些步骤:
git init在生产服务器上做(这样安全吗?)clone 从生产到登台服务器的repoclone从登台到本地机器的回购push 完成更改后,文件到登台服务器push一切都要生产这项工作流程是否有意义,或者有更好的方法可以做到这一点?
如果我只想更改一个文件怎么办?
origin/master在这个过程中是否与它有关?谁是起源?我最终会有多个起源吗?
此外,branch在这种情况下,开发人员何时应该使用?
这似乎很简单,但我找不到任何解决方案.
那么,我如何检查我的应用程序是在生产模式还是开发模式下运行?
我需要在~5M行MySQL表上创建索引.这是一个生产表,如果我运行一个CREATE INDEX语句,我担心一切都完整.
有没有办法创建该索引而不阻止插入和选择?
只是想知道我没有停止,创建索引并重新启动我的系统!
我有一个记录异常条带跟踪的应用程序,我希望这些堆栈跟踪在生产中部署时包含文件名和行号.我想出了如何使用程序集部署调试符号,但在研究问题的过程中我遇到了这个问题,这意味着在生产环境中包含pdb文件并不是一个好主意.对接受的答案的评论说:"......调试信息可以泄露敏感数据并成为攻击媒介.取决于你的应用程序是什么."
那么可能会暴露哪种敏感数据呢?如何使用调试符号来破坏应用程序?我对技术细节很好奇,但我真正想要的是一种评估任何给定应用程序和生产环境中包含调试符号的风险的实用方法.换句话说:可能发生的最坏情况是什么?
编辑:后续问题/澄清
因此,基于目前为止每个人的答案,似乎这个问题可以简化为.NET应用程序.这篇来自John Robbins的博客链接在迈克尔·马多克斯的答案中,有点向我跳了出来:
.NET PDB仅包含两条信息,源文件名及其行和本地变量名.所有其他信息都已包含在.NET元数据中,因此无需在PDB文件中复制相同的信息.
对我来说,这重申了其他人对Reflector所说的话,其含义是真正的问题是访问程序集.一旦确定了,关于PDB的唯一决定是你是否关心暴露文件名,行号和本地变量名(假设你没有向最终用户展示堆栈跟踪).或者我过度简化了这个?
console.log()我的JavaScript中有很多调用.
在部署到生产之前,我应该对它们进行评论吗?
我想把它们留在那里,所以如果我需要做更多的调试,我不必在以后重新添加注释的麻烦.这是一个坏主意吗?
我终于将我的项目发布到了生产级别,突然间我遇到了一些在开发阶段我从未处理过的问题.
当用户发布一些操作时,我有时会收到以下错误.
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "home/ubuntu/server/opineer/comments/views.py", line 103, in comment_expand
comment = Comment.objects.get(pk=comment_id)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 131, in get
return self.get_query_set().get(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 366, in get
% self.model._meta.object_name)
DoesNotExist: Comment matching query does not exist
Run Code Online (Sandbox Code Playgroud)
让我感到沮丧的是项目在本地环境中工作正常,而且数据库中存在匹配的查询对象.
现在我怀疑用户在保留给其他用户时正在访问数据库,但是没有办法证明我的论点,也没有任何解决方案.
以前有人有过这种问题吗?有关如何解决此问题的任何建议?
非常感谢您的帮助.
编辑:我使用从收到的服务器错误电子邮件中检索到的相同信息手动查询数据库.我能够毫无问题地进入该条目.此外,似乎用户执行的完全相同的行为在大多数情况下不会引起任何问题,而是在一些(这是未知的)情况下.总之,数据库中缺少条目肯定不是问题.
使用--prod构建我的角度7项目时,我在预算中有一个警告.
我有一个角度7项目,我想建立它,但我有一个警告:
WARNING in budgets, maximum exceeded for initial. Budget 2 MB was exceeded by 1.77 MB
Run Code Online (Sandbox Code Playgroud)
这些都是块状细节:
chunk {scripts} scripts.2cc9101aa9ed72da1ec4.js (scripts) 154 kB [rendered]
chunk {0} runtime.ec2944dd8b20ec099bf3.js (runtime) 1.41 kB [entry] [rendered]
chunk {1} main.13d1eb792af7c2f359ed.js (main) 3.34 MB [initial] [rendered]
chunk {2} polyfills.11b1e0c77d01e41acbba.js (polyfills) 58.2 kB [initial] [rendered]
chunk {3} styles.33b11ad61bf10bb992bb.css (styles) 379 kB [initial] [rendered]
Run Code Online (Sandbox Code Playgroud)
预算究竟是什么?我该如何管理它们?