小编Chu*_*ckE的帖子

什么时候$ .cache被认为太大了?

我最近在本教程中读到某些jQuery泄漏可以通过$.cache变量进行跟踪,你应该总是检查它的大小,如果它太大,你做错了.

嗯,有多大太大了?有没有办法检查变量,看看它吃多少内存?

我正在开发一个只通过加载主页来缓存210个对象的网站.太多了吗?我很感激在这里对这个问题进行彻底的解释.

javascript jquery memory-leaks browser-cache

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

Ruby Reverse Currying:这可能吗?

关于Ruby 1.9.x中的currying,我一直在某些地方使用它,并且可以像基本上支持默认参数一样转换为proc参数:

p = proc {|x, y, z|x + y + z}
p.curry[1] #=> returns a lambda
p.curry[1, 2] #=> returns a lambda
p.curry[1, 2, 3] #=> 6
p2 = p.curry[1, 2]
p2.(2) #=> 5
p2.(4) #=> 7
Run Code Online (Sandbox Code Playgroud)

非常方便,对吗?事情是,我希望能够反向进行咖喱,这意味着用随机值填充我的proc的最后一个参数.像这样:

p = proc{|x, y| x - y }.curry[1]
p.(4)
Run Code Online (Sandbox Code Playgroud)

我想要的结果是3.这会返回-3.

ruby functional-programming currying

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

Arel:使用符号的左外连接

我有这个用例,我从某个模型获得符号化的深层关联,我必须执行涉及使用外连接的某些查询.如何在不用手写完整SQL的情况下做到这一点?

答案我不想要: - 使用包括(不能很好地解决深层关联(.includes(:cars => [:windows,:engine => [:ignition] .....意外地工作)我不喜欢我不想要它的副作用 - 自己编写SQL(对不起,它是2013,跨数据库支持等等......,我获取的对象是read_only,更多的副作用)

我想要一个Arel解决方案.我知道使用模型中的arel_table我可以构造SQL表达式,还有一个用于连接的DSL,但不知怎的,我不能在模型的连接方法中使用它:

car = Car.arel_table
engine = Engine.arel_table

eng_exp = car.join(engine).on(car[:engine_id].eq(engine[:id]))
eng_exp.to_sql #=> GOOD! very nice!
Car.joins(eng_exp) #=> Breaks!!
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用超出了我的范围.我不知道到底缺少什么.但它与我现在的解决方案最接近.如果有人可以帮我完成我的例子,或者给我一个很好的解决方法,或者告诉我什么时候Rails包含这样一个明显必要的功能将会有我永远的感激之情.

sql activerecord arel ruby-on-rails-3

5
推荐指数
2
解决办法
5161
查看次数

Railtie:如何访问初始化程序和lib加载钩子?

我正在为我的Rails应用程序开发一个gem,它将通过Railtie加载到它中.我基本上是在旧的Rails应用程序风格中插入模型,加上库和一些初始化器.我主要担心的是在整个Rails应用程序加载逻辑中并不完全知道我应该最好插入它们.我的要求是:gem初始化器必须在app初始化器之前加载,与libs相同,初始化器访问lib信息.在Rails应用程序工作流程中,它以某种方式工作.我的短期解决方法如下:

module Gemname
  def self.initialize_railtie
    ActiveSupport.on_load :active_record do
      require 'gemname/lib'
      require 'gemname/initializers'
    end
  end
  class Railtie < Rails::Railtie
  initializer 'gemname.insert_into_app' do
    Gemfile.initialize_railtie
  end
end 
Run Code Online (Sandbox Code Playgroud)

所以这样,我确定在初始化器之前加载了libs.我非常确定有更好的方法,即访问一些铁路钩子,这允许我使用应用程序库加载我的库,使用应用程序初始化器加载初始化程序.我似乎无法找到它们.

gem ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 railtie

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

如何初始化机架服务器监听套接字

我必须修补一些代码,但无法弄清楚具体如何.所以基本上,我有一个机架服务器绑定到主机名和端口.我喜欢它绑定到unix socket.问题是,我无法弄清楚我必须给出的确切选项.

Rack::Server.new(:app => @app, :port => 3000).start 
Run Code Online (Sandbox Code Playgroud)

做了什么预期.我以为会是这样的:

Rack::Server.new(:app => @app, :socket => "path/to/file").start
Run Code Online (Sandbox Code Playgroud)

但是这会绑定到默认端口.我怎样才能做到这一点?

rack ruby-on-rails unix-socket

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

Ruby Lazy Enumerable flat_map不是很懒惰

编辑:由于我用错误的例子写了这个问题并没有描述我的问题,我会再做一次!

在我看来,#flat_map,即使是Enumerator :: Lazy类的一部分,也不是很可枚举的.

这个例子正确地工作:

(1..Float::INFINITY).flat_map { |s| [s,s] }.take(4).to_a
Run Code Online (Sandbox Code Playgroud)

懒惰的实现也将起作用:

(1..Float::INFINITY).flat_map { |s| [s,s] }.take(4).to_a
Run Code Online (Sandbox Code Playgroud)

这只会考虑到块内生成的数组是有限的.但是在take(4)调用发生之前,它们也将被完全评估.哪个不是很懒惰.

因此,这将失败:

(1..Float::INFINITY).lazy.flat_map { |i| (i..Float::INFINITY).map(&:to_i) }.take(4).force
Run Code Online (Sandbox Code Playgroud)

因为在懒惰调用发生之前将完全评估"无限范围到数组".不过,我希望它"默认为懒惰".我的意思是,我确实理解这个难题在哪里,但我希望它以这种方式发生:flat_map评估每个实例是懒惰的,知道结果将是一个数组(或者至少是可枚举的),并将应用惰性机制在上面.因此,(i..Float :: INFINITY).map(&:to_i)将被lazified(这似乎不太兼容,因为map(&:to_i)调用将"强制"计算它).

ruby enumerable lazy-evaluation

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

ElasticSearch/Tire:如何正确设置部分单词搜索

虽然我已经看到很多关于它提到这个相对简单的说法,但我还没有看到它正常工作.假设我有这个:

class Car < ActiveRecord::Base
  settings analysis: {
    filter: {
      ngram_filter: { type: "nGram", min_gram: 3, max_gram: 12 }
    },
    analyzer: {
      partial_analyzer: {
        type: "snowball",
        tokenizer: "standard",
        filter: ["standard", "lowercase", "ngram_filter"]
      }
    }
  } do
    mapping do
      indexes :name,                    index_analyzer: "partial_analyzer"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

让我们说我有一辆名为"福特"的汽车,我更新了我的索引.现在,如果我搜索"福特":

Car.tire.search { query { string "Ford" } }
Run Code Online (Sandbox Code Playgroud)

我的车在我的结果中.现在,如果我寻找"For":

Car.tire.search { query { string "For" } }
Run Code Online (Sandbox Code Playgroud)

我的车再也找不到了.我认为nGram过滤器会自动为我处理它,但显然它不是.作为临时解决方案,我使用通配符(*)进行此类搜索,但这绝对不是最佳方法,是我搜索中的min_gram和max_gram定义关键元素.谁能告诉我他们是如何解决这个问题的?

我正在使用Rails 3.2.12和ruby 1.9.3.ElasticSearch版本为0.20.5.

ruby-on-rails elasticsearch tire

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