小编Jak*_*nes的帖子

使用nginx提供预编译资产

是否可以直接使用nginx提供预编译资产?使用Rails动态提供资源的速度要慢20倍(4000 req/sec对比我的virtualbox中的200 req/sec).

我想这可以通过nginx.conf中的一些重写规则来完成.但问题是,这些文件名包含内容的md5哈希,所以我真的不明白可以用这个做什么.

如果不可能,我不会用Rails 3.1资产管道获得全部想法.以x20服务器负载为代价减少客户端带宽和页面加载时间?

有任何想法吗?

UPD:所以,当我的应用程序中的所有内容以~3500-4000个请求/秒的速度提供时,我设法以某种方式设置我的nginx和Rails .

首先,我添加了两个虚拟主机,其中一个作为另一个的缓存代理,发现资产以我想要的速度提供(4k).然后,我连我的Rails应用程序使用memcached的(没有什么特别的,到目前为止,只有一个在application.rb中一行:ActionController::Base.cache_store = :mem_cache_store, "localhost")

然后我添加了类似于expires_in 1.hour, :public => true if !signed_in?;我的控制器的东西来改变Rails内容的默认缓存策略,并为我的动态页面提高了大约500个请求/每秒的速度提升(之前它接近200,在我开始这之前是~50)所有).

现在,当我的nginx配置文件看起来像这样:

nginx.conf:

...
proxy_cache_path  /tmp/blog keys_zone=one:8m max_size=1000m inactive=600m;
proxy_temp_path /tmp;
gzip  off;
include /opt/nginx/conf/sites-enabled/*;
Run Code Online (Sandbox Code Playgroud)

网站启用/博客:

server {
        listen   8080;
        server_name  blindsight;

        root   /home/mike/rails/blog/public;
        rails_env production;

        # serve static content directly
        location ~* \.(ico|jpg|gif|png|swf|html)$ {
          if (-f $request_filename) {
            expires max;
            break;
          }
        }

        passenger_enabled on;

        location ~ /\.ht {
          deny  all;
        }
}
Run Code Online (Sandbox Code Playgroud)

/主启用网站 …

ruby-on-rails nginx ruby-on-rails-3

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

获取有限的Mongoid查询结果和.count()的最后一个文档

我正在使用Mongoid与MongoDB一起工作.一切都很好,我非常喜欢等等.在我的博客应用程序(发布控制器,索引操作)中,我有以下代码:

@posts = Post.without(:comments)
@posts = @posts.my_search(params[:s]) if params[:s]
@posts = @posts.order_by([:created_at, :desc])
@posts = @posts.where(:pid.lt => params[:p].to_i+1) if params[:p]
@posts = @posts.limit(items_per_page+1)
Run Code Online (Sandbox Code Playgroud)

具有"where"的部分是我自己的分页方法的实现(允许仅在一个方向上分页结果,但没有skip(),我认为是加号).现在,有一些小问题让我感到不舒服:

为了我的分页工作,我需要在该限制内获得最后一篇文章.但是当我这样做时,我@posts.last无限制地获得整个查询的最后一个文档.好的,这很奇怪,但不是一个大问题.除此之外,查询结果就像几乎普通的数组一样,所以此刻我得到了最后一个元素@posts.pop(搞笑,但它没有删除任何文档)或者@posts.fetch(-1)

我有一种感觉,这不是"正确的方式",并且有更优雅的东西.还 @posts.count生成第二个查询与第一个查询完全相同(没有限制),但只有"count",我不喜欢它.

如果我让最后一行看起来像

@posts = @posts.limit(items_per_page+1).to_ary
Run Code Online (Sandbox Code Playgroud)

要将查询结果转换为数组,一切只生成一个查询(好),但现在@posts.count停止报告我需要的内容(没有应用限制的文档总数)并且行为完全像@posts.size- 它返回items_per_page+1或更少(坏).

所以,这是我的问题:

1)在给定限制内获取查询结果的最后一个文档的"正确"方法是什么?

2)如何在不产生额外查询的情况下获取给定条件的文档总数?

UPD:

3)@ posts.first生成额外的查询,如何防止它,并在迭代所有文档之前获取第一个文档?

ruby-on-rails mongoid

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

标签 统计

ruby-on-rails ×2

mongoid ×1

nginx ×1

ruby-on-rails-3 ×1