小编Vin*_*hBS的帖子

服务器在一段时间后挂起所有请求

我们的Rails 4.0应用程序(Ruby 2.1.2)使用Puma 2.9.0在Nginx上运行.

我最近注意到,对我们的应用程序的所有请求都会在一段时间后停止(通常为1或2天).

检查设置为debugmode的日志时,我注意到以下日志堆栈:

[2014-10-11T00:02:31.727382 #23458]  INFO -- : Started GET "/" for ...
Run Code Online (Sandbox Code Playgroud)

它确实意味着请求实际上访问了Rails应用程序,但不知何故它没有继续,而通常它会是:

I, [2014-10-11T00:02:31.727382 #23458]  INFO -- : Started GET "/" for ....
I, [2014-10-11T00:02:31.729393 #23458]  INFO -- : Processing by HomeController#index as HTML
Run Code Online (Sandbox Code Playgroud)

我的puma配置如下:

threads 16,32
workers 4
Run Code Online (Sandbox Code Playgroud)

我们的应用程序仅用于现在的内部使用,因此RPM非常低,并且所有请求都不会超过2秒.

可能导致此问题的原因是什么?(puma配置,数据库连接等)

先感谢您.

更新:在安装gem rack_timer以记录在每个中间件上花费的时间之后,我意识到我们的请求在发生挂起时一直停留在ActiveRecord :: QueryCache上,并且有大量时间:

Rack Timer (incoming) -- ActiveRecord::QueryCache: 925626.7731189728 ms
Run Code Online (Sandbox Code Playgroud)

我暂时删除了这个中间件,它似乎恢复正常.但是,我理解这个中间件的目的是提高性能,因此删除它只是一个临时解决方案.请帮我找出这个问题的可能原因.

仅供参考,我们使用mysql(5.1.67)和适配器mysql2(0.3.13)

mysql ruby-on-rails nginx puma

9
推荐指数
1
解决办法
810
查看次数

生产模式的Ckeditor gem问题

我正在使用CKEditor gem.我的配置application.jsroutes.rb以下内容如下:

# application.js
//= require ckeditor/init

# routes.rb
mount Ckeditor::Engine => '/ckeditor'
Run Code Online (Sandbox Code Playgroud)

gem在开发模式下工作正常,但是当转到生产模式时,当浏览器请求ckeditor文件夹中的js和css文件时,我收到错误404:

GET http://mydomain/assets/ckeditor/config.js?t=D2LI 404 (Not Found)
GET http://mydomain/assets/ckeditor/skins/moono/editor.css?t=D2LI 404 (Not Found)
GET http://mydomain/assets/ckeditor/lang/vi.js?t=D2LI 404 (Not Found)
GET http://mydomain/assets/ckeditor/styles.js?t=D2LI 404 (Not Found) 
Run Code Online (Sandbox Code Playgroud)

请帮我修复我的ckeditor路由配置.先感谢您.

ruby ruby-on-rails ckeditor

8
推荐指数
1
解决办法
4856
查看次数

请求卡在ActiveRecord :: QueryCache中间件中

在部署了我们的Rails应用程序(4.0.9,Ruby 2.1.2)之后,我们注意到我们的应用程序的请求会在一段时间后挂起,通常是1天左右.

使用gem rack_timer,我们能够找到被困在ActiveRecord :: QueryCache中间件的请求.

Rack Timer (incoming) -- ActiveRecord::QueryCache: 925626.7731189728 ms
Run Code Online (Sandbox Code Playgroud)

删除后,我们的应用程序似乎恢复正常.但是,我理解这个中间件的目的是提高性能,因此删除只是一个临时解决方案.我们使用带适配器的mysql(5.1.67)mysql2(0.3.13)

更新:发布此问题后,服务器再次开始挂起,这次请求被卡在ActionDispatch :: Routing :: RouteSet

I, [2014-10-13T23:17:03.661346 #32498]  INFO -- : Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 3667661.2360477448 ms
I, [2014-10-13T23:17:03.661946 #32498]  INFO -- : Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 4373914.719343185 ms
Run Code Online (Sandbox Code Playgroud)

你知道有什么理由会导致这个吗?

先感谢您.

mysql rack ruby-on-rails

8
推荐指数
1
解决办法
2910
查看次数

[Mongoose] 使用异步查询中的数据覆盖 toJSON

我的架构如下所示:

var CompanySchema = new Schema({
  //
});

CompanySchema.methods.getProducts = function(next) {
  var Product = require(...);
  Product.find({...}).exec(function(err, products) {
    if (err) 
      return next(err)
    return next(null, products || []);
  });
};
Run Code Online (Sandbox Code Playgroud)

我想知道在序列化 Company 对象时是否有某种方法可以包含 getProducts() 方法的结果,例如:

CompanySchema.methods.toJSON = function() {
  var obj = this.toObject();
  obj.products = this.getProducts();
  return obj;
};
Run Code Online (Sandbox Code Playgroud)

先感谢您。

mongoose mongodb node.js

5
推荐指数
1
解决办法
2508
查看次数

使用Ruby Enterprise v1.8.7安装ruby-debug/ruby​​-debug-base时出错

我在尝试安装gem ruby​​-debug-ide时遇到了问题.然后,我首先尝试安装gem ruby​​-debug-base.但是,我收到了一个错误:

Error installing ruby-debug-base:
rb-threadframe requires Ruby version ~> 1.9.2frame.
Run Code Online (Sandbox Code Playgroud)

安装ruby-debug时发生了同样的错误.

我正在使用Ubuntu v10.4,Ruby Enterprise v1.8.7,Rubygems v1.8.15.

谢谢你的帮助!

ruby linux ubuntu ruby-debug

2
推荐指数
1
解决办法
1033
查看次数

Backbone View事件在更改el属性时不触发

我是Backbone的新手,试图做一些例子,但我坚持这个.我有以下BackBone视图:

CommentBoxView = Backbone.View.extend({
    initialize: function () {
        this.render();
    },
    render: function () {
        var template = _.template( $("#comment_box_template").html(), {} );
        this.el.html(template);
    },
    events: {
        "keypress textarea": "doKeyPress"
    },
    doKeyPress: function (event) {
        console.log(event);
    }
});
Run Code Online (Sandbox Code Playgroud)

一切都运行正常,但如果我更换

this.el.html(模板);

有了这个:

this.el = $(template).replaceAll(this.el);

按键事件根本没有被触发.任何人都可以向我解释为什么它发生以及如何使这个代码有效?非常感谢你们.

javascript backbone.js

2
推荐指数
1
解决办法
1599
查看次数

在模板中使用Ember组件的方法

我刚开始学习Ember,有一件事我很困惑,如果我可以在模板中访问组件的方法.

例如,我有一个note-list组件,呈现如下列表note-line:

<ul class="list">
  {{#each notes as |note|}}
    {{note-line note=note index=@index selected=(isSelected note)}}
  {{/each}}
</ul>
Run Code Online (Sandbox Code Playgroud)

note-list组件定义为:

Ember.Component.extend({
    tagName: '',
    isSelected(note) {
        return note.id === this.get('selectedNote').id
    }
})
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误Assertion Failed: A helper named 'isSelected' could not be found.

我想我可以用帮助器解决它,但似乎不是一个很好的解决方案来为特定组件的行为创建一个单独的帮助器.

请帮忙告诉我一些更好的处理方法.

非常感谢.

javascript ember.js

1
推荐指数
1
解决办法
1086
查看次数