我已将此发布到ServerFault,但Node.js社区似乎很小,所以我希望这会带来更多曝光.
我有一个Node.js(0.4.9)应用程序,正在研究如何最好地部署和维护它.我想在云端(EC2或RackSpace)以高可用性运行它.该应用应该在HTTPS上运行.稍后我会担心East/West/EU完全故障转移.
我已经做了大量关于keep-alive(Upstart,Forever),多核实用程序(Fugue,多节点,Cluster)和代理/负载均衡器(node-http-proxy,nginx,Varnish和Pound)的阅读.但是,我不确定如何结合我可用的各种实用程序.
我有这个设置,需要解决一些问题并获得反馈.
一般的问题:
我真的很想知道人们如何建立当前的生产环境以及他们喜欢哪种工具组合.非常感激.
我的服务器的Upstart脚本如下所示:
description "myapp node.js server"
start on runlevel [2345]
stop on shutdown
env NODE_ENV=production
env CUSTOM=somevalue
exec sudo -u nodejs /usr/local/bin/node /opt/myapp/app.js >> /var/log/nodejs/myapp.log 2>&1
post-start script
NODE_PID=`status myapp | egrep -oi '([0-9]+)$' | head -n1`
echo $NODE_PID > /var/run/nodejs/myapp.pid
end script
Run Code Online (Sandbox Code Playgroud)
但是,该应用程序未将NODE_ENV设置为生产.事实上,如果我在app中使用console.log(process.env),我看不到NODE_ENV或CUSTOM.有什么想法发生了什么?
顺便说一句,NODE_ENV =生产节点app.js工作正常.
我有一个ASP.NET MVC 1应用程序,它使用NHibernate和Castle Windsor用于IoC.控制器注入了服务类,这些服务类处理应用程序所需的所有逻辑和操作.服务类注入了存储库.每个存储库处理单个对象.对象通过NH映射到DB表.我试图在服务和控制器之间保持一对一的关系,但是一些服务在多个控制器中使用.
问题是某些服务现在依赖于10-15个存储库.例如,系统具有开票组件,其中某些操作取决于用户,客户,工作单,工作单行项目,发票,发票行项目,税金等.
当涉及到依赖性过载时,人们用什么策略来有效地重构?我正在考虑将一个服务拆分为多个服务,并删除服务和控制器之间的一对一尝试.但随后控制器级别的依赖性将增加.在事先建议的情况下,可以将一个控制器拆分成多个控制器,但我不相信,除非您将视图分解为部分视图,否则不会这样做?我意识到这是一个广泛的问题,但我更需要指导而不是确切的答案.随意提供类似重构的文章或示例的链接.
我为Redis编写了一个Upstart脚本,如下所示:
description "Redis Server"
start on runlevel [2345]
stop on shutdown
expect daemon
exec sudo -u redis /usr/local/bin/redis-server /etc/redis/redis.conf
respawn
respawn limit 10 5
Run Code Online (Sandbox Code Playgroud)
然后我通过它的redis.conf配置redis到:
daemonize yes
Run Code Online (Sandbox Code Playgroud)
所有文档和我自己的实验都表示Redis以守护进程形式分叉两次并且"expect daemon"应该可以工作,但Upstart脚本始终保持前父级的PID(PID-1).有人有这个工作吗?
我目前正在使用以下正则表达式来验证 URL:
^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)? (?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|edu|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$
Run Code Online (Sandbox Code Playgroud)
我从网络上的某个地方借用了这个(不记得在哪里)来改进这一点:
^((https?|file|ftp|gopher|news|nntp):\/\/)([a-z]([a-z0-9\-]*\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?$
Run Code Online (Sandbox Code Playgroud)
但是,这些都无法验证此 url(应该是有效的):
http://somedomain.com/users/1234/images/Staff%20Photos%202008/FirstName%20LastName_1%20(Small).jpg
Run Code Online (Sandbox Code Playgroud)
问题在于 %20 和圆括号 ()。尽我所能,我无法使用上面的任何一个正则表达式来正确验证上面的 url,而不会破坏其他内容。我没有编写花哨的正则表达式的经验,所以这也没有帮助。我发现的所有其他网络结果都因愚蠢的事情而失败,例如:
http://www.test..com
Run Code Online (Sandbox Code Playgroud)
如有帮助,将不胜感激。
我正在尝试使用一些技术来优化我的ASP.NET MVC应用程序,这些技术包括调整URL生成:http://www.chadmoran.com/blog/2009/4/23/optimizing-url-generation-in-aspnet- MVC-部分2.HTML
如果使用RouteValueDictionary代替匿名类之间的速度差异很大,那么在定义html属性时我是否还应该使用Dictionary代替匿名类?
例如,我应该这样做:
Html.ActionLink("LinkName", "Action", "Controller",
new RouteValueDictionary { { "id", Model.Id } },
new { @class = "someCSSClass" })
Run Code Online (Sandbox Code Playgroud)
或者我应该通过这样做进一步优化:
Html.ActionLink("LinkName", "Action", "Controller",
new RouteValueDictionary { { "id", Model.Id } },
new Dictionary<string, object> { { "class", "someCSSClass" } })
Run Code Online (Sandbox Code Playgroud)
我知道使用Url.Action更快,或者更好地使用RouteLink技术,但我只是想知道为了速度,是否应该完全避免使用匿名类.
如果从数据库中提取链接的名称,您是否应该调用Html.Encode方法来清除名称?
例如:
Html.ActionLink(Model.PersonFromDB.FirstName,
"Action",
"Controller",
new RouteValueDictionary { { "id", Model.PersonFromDB.Id } },
null)
Run Code Online (Sandbox Code Playgroud)
要么:
Html.ActionLink(Html.Encode(Model.PersonFromDB.FirstName),
"Action",
"Controller",
new RouteValueDictionary { { "id", Model.PersonFromDB.Id } },
null)
Run Code Online (Sandbox Code Playgroud)
有意义的是你想要这样做以确保没有危险的字符串注入到页面之间<a>
和</a>
标签之间,但是脚本和锚标签之间的可执行文件?
我想知道SQL Server如何命令从查询返回的数据,并且各个表的Id列都是uniqueidentifier类型.
我在创建所有GUID时使用NHibernate GuidComb并执行以下操作:
Sheet sheet = sheetRepository.Get(_SheetGuid_); // has many lines items
IList<SheetLineItem> lineItems = sheet.LineItems;
Run Code Online (Sandbox Code Playgroud)
我只想弄清楚当我做以下事情时如何订购它们:
foreach (SheetLineItem lineItem in lineItems)
Run Code Online (Sandbox Code Playgroud)
我无法在订购时找到关于GUID与SQL进行比较的方式的好文章,如果这是正在发生的事情.
asp.net-mvc ×3
node.js ×2
upstart ×2
url ×2
actionlink ×1
daemon ×1
deployment ×1
html ×1
html-encode ×1
nhibernate ×1
redis ×1
refactoring ×1
regex ×1
sql ×1
sql-server ×1
t-sql ×1
ubuntu ×1
validation ×1