小编bra*_*rad的帖子

压缩来自Rails应用程序的JSON响应

我们有一个应用程序,可以查询客户的位置.我们已经达到了一些客户可能拥有超过10,000个位置的程度.对此的JSON响应可能会非常大,有时会超过1mb.

我首先想知道压缩这个的最佳方法.我们在使用JRuby在trinidad中运行的Rails应用程序前面有apache.我可以设置mod_deflate以始终压缩application/json的任何响应吗?我该怎么做呢?

接下来,对gzip'd json的浏览器支持是什么?当我gzip一个200k的样本响应时,它下降到30k.这是一笔可观的节省.我们真的希望能够最小化响应的大小,而不必最小化返回的位置数量.

json gzip ruby-on-rails apache2

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

Rails表单,以一种形式创建多个父母和子女

我早些时候问了这个问题,但我要改一下.我有一个工作表,用户可以创建许多目标,每个目标都有许多属性(选择指定attribute_id的).每个目标都是通过jscript添加的.来自ryan bates的多模型截屏视频解释了如何动态添加多个孩子,但没有深入研究多个父母.代码

<% fields_for "target_attributes[]", Target.new do |target| -%> <%= target.select("id",@classification_hash[classification_type.id].collect{|c| [c.name,c.id]}

给我选择元素(form_for:工作表)

<select id="worksheet__target_id" class="selectbox" name="worksheet[target_attributes][][attribute_id]">

并将所有目标属性放入传递的参数中的哈希数组中,这很好.所以我认为我可以采用这种逻辑并拥有一个嵌套的fields_for,然后将我的所有目标及其属性放入自己的数组中

<% fields_for "worksheet[]",Worksheet.new do |worksheet| -%> <% worksheet.fields_for "target_attributes[]", Target.new do |target| -%> <%= target.select("id",@classification_hash[classification_type.id].collect{|c| [c.name,c.id]}

给我形式

<select id="worksheet__target_id" class="selectbox" name="worksheet[][target_attributes][][attribute_id]">

所以,我想我的所有目标都将在他们自己的阵列中,并且所有人都会变成肉汁,但我在我的参数中得到了这个:

worksheet"=>
  [{"target_attributes"=>[{"id"=>"12"}]},
   {"target_attributes"=>[{"id"=>"15"}]},
   {"target_attributes"=>[{"id"=>"17"}]},
   {"target_attributes"=>[{"id"=>"14"}]},
   {"target_attributes"=>[{"id"=>"16"}]},
   {"target_attributes"=>[{"id"=>"17"}]}]

(注意,每个目标有3个target_attribute选项,因此列出了具有3个属性的两个目标)因此,显然我无法在控制器中以这种方式分隔每个目标以创建新的目标对象.谁能帮我吗?我喜欢一个看起来像这样的表格:

<select id="worksheet__target_id" class="selectbox" name="worksheet[target_attributes][0][][attribute_id]"> (每次目标属性3次)

<select id="worksheet__target_id" class="selectbox" name="worksheet[target_attributes][1][][attribute_id]"> 等添加的每个目标等

然后我有一个新的"行"基本上为每个新任务.但是如果没有一些混乱的Javascript来评估选择名称并根据一些Javascript迭代器变量修改它,我无法看到任何方法.任何想法都非常感谢

ruby-on-rails

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

Node.js-为什么我的回调针对每个请求被调用3次?

这是我的“非常第一”节点应用程序。我实际上只是开始遍历API以了解其全部内容。以下服务器代码和控制台输出使我立即感到困惑。有人可以解释为什么我的console.log在浏览器刷新中发生3次吗?

var http = require('http');

http.createServer(function(request, response){
  response.writeHead(200, {'Content-Type': 'application/json'});
  response.end("{blah: 1234}");
  console.log("Hello!");
}).listen(3000, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)

浏览器中的一次刷新输出为:

Hello!
Hello!
Hello!
Run Code Online (Sandbox Code Playgroud)

我想念什么?

OSX 10.5,节点0.4.3

node.js

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

创建红宝石字符串的不同方式

我曾经遇到过这几次,但从来没有真正理解过它.有人可以向我解释这个语法如何创建一个字符串?

STRING = <<-EOS
This is a string!!
EOS

puts STRING
=> "This is a string!!"
Run Code Online (Sandbox Code Playgroud)

首先,我认为有一些特别的东西<<-EOS,但它实际上似乎适用于任何字符. <<x例如也有效

有人可以向我解释这种语法究竟意味着什么?如何创建一个字符串?

ruby string

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

活动资​​源错误状态和响应正文

我正在对服务进行activeresource调用,我希望一些自定义错误消息作为反馈。我有一些验证不是正常的模型验证,所以我不能只返回@ object.errors。

因此,例如,我的验证之一就是这个。两个对象之间存在多对多关系,但我想将一个对象限制为与其他对象之间只有有限数量的关系(例如2)。这是一些代码:

在客户端中:

response = Customer.find(customer_id).put(:add_user, :user_id => user_id)
Run Code Online (Sandbox Code Playgroud)

这提出了向用户添加用户的请求。然后在服务中,我要检查此添加是否有效。

def add_user    
 @user = User.find(params[:user_id])
 @customer = Customer.find(params[:id])
 if @customer.users.length > 2
  render :xml => "ERR_only_2_users_allowed", :status => :unprocessable_entity
 end
end
Run Code Online (Sandbox Code Playgroud)

这是我的问题。在活动资源中,如果返回状态为错误,则客户端完全失败。我可以将状态更改为200,然后再返回err msg正文,但这似乎无法实现具有错误响应代码的目的。

我可以将来自客户端的整个请求调用放在开始/救援块中

begin
    response = Customer.find(customer_id).put(:add_user, :user_id => user_id)
  rescue ActiveResource::ResourceInvalid => e
    #return error code
end
Run Code Online (Sandbox Code Playgroud)

但是当我收到422(unprocessable_entity)响应时,我什么也没回来,所以我没有收到自定义错误消息。响应=无

有谁知道我如何使用适当的响应代码来实现这些自定义错误消息?

ruby-on-rails activeresource

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

Rails动作缓存问题

我不太确定如何确保我的缓存工作,但我很确定它不是.我有一个带有索引操作的用户控制器,我在操作缓存,直到创建新用户.这是代码:

UsersController < ApplicationController
  caches_action :index
  def index
    @users = User.all
  end

  def create
    expires_action :index
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,在我访问index操作的日志中,我看到:

Cached fragment hit: views/localhost:3000/users (0.0ms)
Filter chain halted as [#<ActionController::Filters::AroundFilter:0xe2fbd3 @identifier=nil, @kind=:filter, @options={:only=>#<Set: {"index", "new"}>, :if=>nil, :unless=>nil}, @method=#<Proc:0x186cb11@/Users/bradrobertson/.rvm/gems/jruby-1.5.3/gems/actionpack-2.3.10/lib/action_controller/caching/actions.rb:64>>] did_not_yield.
Run Code Online (Sandbox Code Playgroud)

我不确定这filter chain halted ... did_not_yield是什么,我也看到select * from users......每次都会被调用,这不是我所期待的.

有人可以告诉我这里发生了什么以及为什么这不符合我的预期?即.当整个动作的输出应该被缓存时,为什么User.all会运行?

caching ruby-on-rails action-caching

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

使用Vagrant/Chef-solo设置postgresql密码

我在我的chef-solo开源项目公寓的Vagrant盒子上第一次尝试了一下,这样贡献者可以更轻松地启动和运行开发环境.

我现在无法实现的一件事是覆盖本食谱中postgresql配方设置的默认密码

文档提到设置json配置,例如:

postgresql: {
  password: {
    postgres: ''
  }
}
Run Code Online (Sandbox Code Playgroud)

我在这里做过但我似乎无法覆盖由配方设置的默认加密密码.

我是全新的(截至今天)给厨师/流浪汉,所以我有点迷失在哪里,我甚至应该看下一步.

任何帮助是极大的赞赏.

postgresql vagrant chef-solo

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

异步javascript加载器的推荐用法

刚开始查看异步javascript加载libs,例如lab.jsscript.js.我的问题是关于使用这种异步加载模式的最佳实践.

我想过几个可能的设置:

  1. 使用脚本标记在顶部或页面加载异步加载器.这允许gzipping和缓存,但它也会在初始加载期间阻塞.这可能不是一个问题,因为这些加载器应该相当小(我们应该首先加载css)吗?

  2. 在您的html中嵌入异步加载器代码,然后立即开始使用以加载依赖项.这意味着没有对异步加载器的单独请求,因此它可能更快一点,但它也不会被gzip压缩和缓存,因此每次都必须加载.

  3. 在页面底部执行JS的经典加载,以便首先加载样式表等.将异步加载器放在页面底部的阻塞脚本标记中,然后异步加载所有依赖项.

什么是最常用的场景,人们通常如何异步加载他们的js?

javascript dependency-management asynchronous-loader

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