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) 例如,在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导致内容类型得到尊重,但显然这不是一个真正的解决方案.有谁知道解决这个问题的正确方法?谢谢.
在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)
我怎样才能解决这个问题?
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
假设我有一个 table posts,另一个reviews包含 apost_id和 a rating(整数)的表。
如何添加一个过滤器以app/admin/post.rb返回具有特定总分的帖子?(例如 SUM(reviews. rating) GROUP BY (posts.id))。我希望过滤器与其他过滤器一起显示在索引的右侧,并且理想情况下充当范围输入。
需要明确的是,当我说“过滤器”时,我指的是 ActiveAdminfilter方法,它将过滤器添加到索引页面的右侧边栏。
我创建了一个范围,其中Post返回带有分数的帖子,但我无法找到在 ActiveAdmin 过滤器中使用它的方法。
注意:我重写了我的示例,因为我原来的示例没有体现问题的复杂性。
我想更改Mysql2 :: Client正在使用的数据库(例如,在mysql命令行中键入"use X"),而不必建立与DB服务器的新连接.
这可能吗?怎么样?
ruby ×4
activeadmin ×1
linux ×1
memory ×1
mysql ×1
mysql2 ×1
rails-spring ×1
ransack ×1
rest-client ×1
ruby-2.0 ×1
unicorn ×1