我在这里有一个赏金的问题:
看起来好像是由于VPS的最大内存大小,现在在将VPS内存大小增加到4GB之后,当GC似乎启动时节点JS消耗3.x GB.然后在节点之前需要大约1小时到GC再次变得敏感,至少看起来就像服务器监控工具一样:空闲内存达到0,然后持续约60分钟进程运行(CPU负载上升),之后Node.JS应用程序再次发送数据.
这么长的垃圾收集过程"正常"吗?我错过了什么吗?
这里有一些图表来说明它:图1:CPU负载1 Min,图2:网络流量,Mbps,图3:CPU utlization
![在此处输入图像说明] [1]
对于那些没有按照上面的链接,这个问题是关于使用Pub/Sub和Redis接收消息然后发送到所有连接的客户端的节点应用程序.
我已经注释掉"发送给客户"并且内存增加大幅减慢,让我相信这可能是部分原因,这是该部分的代码:
nUseDelay=1;
....
....
if(nUseDelay>0) {
setInterval(function() {
Object.getOwnPropertyNames(ablv_last_message).forEach(function(val, idx, array) {
io.sockets.emit('ablv', ablv_last_message[val]);
});
ablv_last_message= {};
}, 15000*nUseDelay);
}
Run Code Online (Sandbox Code Playgroud)
如果我评论出来:
// Object.getOwnPropertyNames(ablv_last_message).forEach(function(val, idx, array) {
// io.sockets.emit('ablv', ablv_last_message[val]);
// });
Run Code Online (Sandbox Code Playgroud)
内存增加似乎非常缓慢.为什么会这样?这是一个所谓的"关闭",如果是这样,如何理想地重新编码?
这里是完整的代码,这不是一件非常复杂的工作,它看起来更像是任何这种情况的标准框架,其中Node.JS应用程序将中央应用程序的信息发送给所有连接的客户端:
var nVersion="01.05.00";
var nClients=0;
var nUseDelay=1;
var ablv_last_message = [];
// Production
var https = require('https');
var nPort = 6000; // Port of the Redis Server
var nHost = "123.123.123.123"; // Host that is running the Redis …Run Code Online (Sandbox Code Playgroud) 我的环境:Rails 3.2.x与RVM,Passenger,Linux on Linux(Ubuntu),我没有使用Capistrano,暂时不打算这样做.
我已将Resque集成到我的Rails应用程序中,并且在手动启动resque时一切正常
rake RAILS_ENV=production environment resque:work QUEUE='*'
Run Code Online (Sandbox Code Playgroud)
下一步是在Passenger启动(重启)时自动启动Resque(重启).
我该怎么做?
我想使用http://code.shutterstock.com/rickshaw/的Javascript图表
我得到了一个例外,当我的值小于0.00000100然后y轴值以科学格式显示,例如2e-7值为0.00000020
如何让它显示0.00000020而不是2e-7?
我有一个工作的Rails应用程序(3.1.1).现在我写了一个跑步者(保存在app文件夹中).使用以下命令启动运行器时:rails r app/delete_old_addresses.rb
转储:
/Users/andreas/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.1/lib/rails/commands/runner.rb:49:in app'for eval': undefined local variable or methodmain:Object(NameError)from/Users/andreas/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.1/lib/rails/commands/runner.rb:49:in eval'
from /Users/andreas/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.1/lib/rails/commands/runner.rb:49:in"from /Users/andreas/.rvm/gems/ ruby-1.9.2-p180/gems/railties-3.1.1/lib/rails/commands.rb:63:in'from require'
from /Users/andreas/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.1/lib/rails/commands.rb:63:inscript/rails:6:in require'
from script/rails:6:in'
有什么想法吗?我的Webapp工作得非常好.
运行器如下所示:class DeleteOldAddresses <ActiveRecord :: Base end
我正在Ruby On Rails(3.1)上运行一个应用程序,需要处理各种语言的翻译.我使用I18N功能正确处理了我的控制器文本,但是模型中的验证如何,尤其是这样的:
validate :valid_quantities?
def valid_quantities?
if self.quantity*self.unitprice < 1.00
errors.add("The transaction value", "is < 1.00")
return false
end
Run Code Online (Sandbox Code Playgroud)
我如何编码以提供对其他语言的支持?
另外,如何处理数字的格式?我无法调用ActionView助手和用户,例如number_to_currency
我正在将Liberty Reserve购物车集成到我的Rails应用程序中.调用LR(使用fork提交)工作正常,LR也会在成功发布后重定向回我的页面.但是当应用程序返回时,我的会话丢失了.
该页面如下所示:
<form action="https://sci.libertyreserve.com/en" method="GET">
<input type="hidden" name="lr_acc" value="XXXXX">
<input type="hidden" name="lr_store" value="XXX">
<input type="hidden" name="lr_merchant_ref" value="1">
<input type="submit" value="Liberty Reserve"/>
</form>
Run Code Online (Sandbox Code Playgroud)
LR工作的方式是,在用户成功预订了他的交易之后,LR重定向回我的网页,但我的身份验证失败,因为会话变量全部消失了.
我认为它与rails应用程序所需的CSRF-TOKEN有关,但LR显然没有提供.
我可以为一个特定页面/操作停用CSRF胎儿,还是有其他解决方法?
我从http://omnipotent.net/jquery.sparkline/#s-about使用bootstrap和jQuery Sparklines获得了一个RubyOnRails应用程序(3.2.x)
我的页面有两个使用bootstraps的标签,如下所示:
<%=javascript_include_tag "utilities/sparkline.js" %>
<script type="text/javascript">$(function() {$('.inlinesparkline').sparkline('html', {type: 'line', height: '20px', width: '100px'});});</script>
<ul class="nav nav-tabs" id="myTab">
<li><a href="#tab1" data-toggle="pill">Tab1</a></li>
<li class="active"><a href="#tab2" data-toggle="pill">Tab2</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane well" id="tab1">
<span class="inlinesparkline">1,2,3,4,5,6,7,6,5,4,3,4,5,6,7,8,7,6,4</span>
</div>
<div class="tab-pane well active" id="tab2">
Hi there
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果第二个选项卡是活动选项卡,则切换到第一个选项卡时显示的数字不是迷你图,但如果我将选项卡1设置为活动选项卡,则会绘制迷你图.
我该如何解决?
我有一个NodeJs应用程序,它通过Redis服务器上的subscribe来监听消息.它收集消息5秒钟,然后将它们推送到连接的客户端,代码如下所示:
io.sockets.on('connection', function (socket) {
nClients++;
console.log("Number of clients connected " + nClients);
socket.on('disconnect', function () {
nClients--;
console.log("Number of clients remaining " + nClients);
});
});
Run Code Online (Sandbox Code Playgroud)
接收消息以发送给客户端
cli_sub.on("message",function(channel,message) {
oo = JSON.parse(message);
ablv_last_message[oo[0]["base"]+"_"+oo[0]["alt"]] = message;
});
setInterval(function() {
Object.keys(ablv_last_message).forEach( function(key) {
io.sockets.emit('ablv', ablv_last_message[key]);
});
ablv_last_message = [];
}, 5000);
Run Code Online (Sandbox Code Playgroud)
解决方案找到了(至少我是这么认为):节点没有崩溃,因为它达到了一些内部内存限制,它看起来好像因为我的VPS内存耗尽而崩溃,它也是一个2GB VPS运行一个或两个其他进程.在将其升级到4GB后,Node运行顺畅,是的,总是大约1.6到2.0 GB,但我相信它的GC在这里工作.
我有一张表可以保存已执行的采购订单.对于报告,我希望按升序列出最后50个创建的采购订单(表的ID字段可以识别那些).
我试过了
a = Order.limit(50).order("id desc").order("id asc")
Run Code Online (Sandbox Code Playgroud)
但那没有用,也没有用
a = (Order.limit(50).order("id desc")).order("id asc")
Run Code Online (Sandbox Code Playgroud)
也不
a = Order.limit(50).order("id desc")")
b = a.order("id asc")
Run Code Online (Sandbox Code Playgroud) 我在Ubuntu上运行了Rails应用程序(3.2.x)并使用了Passenger.
我添加了选项
gzip on;
Run Code Online (Sandbox Code Playgroud)
进入nginx.conf文件,但测试页面
http://www.gidnetwork.com/tools/gzip-test.php
Run Code Online (Sandbox Code Playgroud)
表明没有使用压缩.
我的nginx.conf文件如下所示:
worker_processes 8;
events {
worker_connections 1024;
}
http {
passenger_root /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19;
passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3-p392/ruby;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name xxx.com;
root /var/www/xxx/public;
rewrite ^ https://$server_name$request_uri? permanent;
passenger_enabled on;
}
server {
listen 443;
server_name xxx.com;
root /var/www/xxx/public;
passenger_enabled on;
ssl on;
ssl_certificate /etc/ssl/private/ssl_xxx_com_certificate.txt;
ssl_certificate_key /etc/ssl/private/ssl_xxx_com_private_key.txt;
ssl_client_certificate /etc/ssl/private/cabundle.txt;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}
}
Run Code Online (Sandbox Code Playgroud) 我有两个数组,每个数组都有许多数组元素.我想通过使用每个数组元素的第一个元素作为标识符添加这两个元素,而添加第二个元素,例如:
a1= [ [0,1], [1,5], [7,3] ]
a2= [ [0,3], [3,2], [1,7] ]
Run Code Online (Sandbox Code Playgroud)
因此我想要(注意输入数组可能没有以任何方式排序):
[ [0,4], [1,12], [3,2], [7,3] ]
Run Code Online (Sandbox Code Playgroud)
结果应该排序.