小编Nic*_*ban的帖子

如何使用Linux上的Ruby 2.0改善独角兽进程之间的内存共享

Ruby 2.0引入了一个写时复制友好的垃圾收集器.我的进程似乎没有让内存共享超过几分钟 - 它似乎很快从shared_dirty转移到private_dirty.

其他一些人已经成功实现这一目标:

该程序可用于检查Linux上的内存统计信息:https://gist.github.com/kenn/5105061

我的独角兽配置:https://gist.github.com/inspire22/f82c77c0a465f1945305

出于某种原因,我的独角兽应用程序(也是preload_app = true)的共享内存要少得多.Ruby 2.0-p195,rails 3.2,linux 2.6.18(centos)

[root@thorn script]# ruby memstats.rb 4946
Process:             4946
Command Line:        unicorn_rails worker[4] -c /u/apps/newap/current/lib/unicorn.rb -E production -D
Memory Summary:
  private_clean                   0 kB
  private_dirty              56,324 kB
  pss                        60,256 kB
  rss                        83,628 kB
  shared_clean                4,204 kB
  shared_dirty               23,100 kB
  size                      108,156 kB
  swap                           68 kB 
Run Code Online (Sandbox Code Playgroud)

如果我完全关闭主进程(不只是一个HUP)然后重新启动它并在任何请求排队之前立即检查一个worker,我得到一个更好的故事:

[root@thorn script]# ruby memstats.rb 5743
Process:             5743
Command Line:        unicorn_rails worker[4] -c /u/apps/newap/current/lib/unicorn.rb -E production -D …
Run Code Online (Sandbox Code Playgroud)

linux memory ruby-on-rails unicorn ruby-2.0

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

如何让Ruby的RestClient gem在帖子上尊重content_type?

例如,在RestClient控制台中:

RestClient.post 'http://localhost:5001', {:a => 'b'}, :content_type => 'application/json'
Run Code Online (Sandbox Code Playgroud)

这不会将application/json作为内容类型发送.相反,我看到:

Content-Type: application/x-www-form-urlencoded
Run Code Online (Sandbox Code Playgroud)

我能够跟踪对restclient/payload.rb的更改:

  class UrlEncoded < Base
  ...

  def headers
    super.merge({'Content-Type' => 'application/x-www-form-urlencoded'})
  end
end
Run Code Online (Sandbox Code Playgroud)

用super替换super.merge导致内容类型得到尊重,但显然这不是一个真正的解决方案.有谁知道解决这个问题的正确方法?谢谢.

ruby rest-client

13
推荐指数
3
解决办法
2万
查看次数

Rails生成错误:没有这样的文件或目录 - getcwd

rails generate新的Rails 4.2项目上运行时,我不断收到错误:

~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/spring-1.3.0/lib/spring/configuration.rb:37:in `pwd': No such file or directory - getcwd (Errno::ENOENT)
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

ruby ruby-on-rails ruby-on-rails-4 rails-spring

10
推荐指数
2
解决办法
7759
查看次数

是否可以基于每个用户设置Active Resource HTTP身份验证的线程安全?

Active Resource可以使用在类级别设置的HTTP身份验证.例如:

class Resource < ActiveResource::Base
end

Resource.user = 'user'
Resource.password = 'password'
Run Code Online (Sandbox Code Playgroud)

要么

Resource.site = "http://user:password@site.com/"
Run Code Online (Sandbox Code Playgroud)

但是,如果我根据登录的用户使用不同的HTTP身份验证呢?如果我更改Resource.user和Resource.password,是否会导致竞争条件,其中来自一个线程的请求突然开始使用其请求在另一个线程中同时运行的用户的身份验证?或者这是一个非问题(只要我重置请求之间的身份验证),因为rails服务器不是多线程的?

即使没有线程安全问题,如果我无法重置它们仍然存在风险,以前用户的凭据将在未来的请求中自动使用.

更新:在对ActiveResource感到沮丧之后,我编写了自己的REST库: https ://github.com/DeepWebTechnologies/well_rested

ruby-on-rails activeresource thread-safety class-variables

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

如何通过连接表过滤 ActiveAdmin 索引列表?

假设我有一个 table posts,另一个reviews包含 apost_id和 a rating(整数)的表。

如何添加一个过滤器以app/admin/post.rb返回具有特定总分的帖子?(例如 SUM(reviews. rating) GROUP BY (posts.id))。我希望过滤器与其他过滤器一起显示在索引的右侧,并且理想情况下充当范围输入。

需要明确的是,当我说“过滤器”时,我指的是 ActiveAdminfilter方法,它将过滤器添加到索引页面的右侧边栏。

我创建了一个范围,其中Post返回带有分数的帖子,但我无法找到在 ActiveAdmin 过滤器中使用它的方法。

注意:我重写了我的示例,因为我原来的示例没有体现问题的复杂性。

ruby ruby-on-rails activeadmin ransack

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

是否可以使用Mysql2 gem更改所选数据库?

我想更改Mysql2 :: Client正在使用的数据库(例如,在mysql命令行中键入"use X"),而不必建立与DB服务器的新连接.

这可能吗?怎么样?

ruby mysql mysql2

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