我最近在本教程中读到某些jQuery泄漏可以通过$.cache变量进行跟踪,你应该总是检查它的大小,如果它太大,你做错了.
嗯,有多大太大了?有没有办法检查变量,看看它吃多少内存?
我正在开发一个只通过加载主页来缓存210个对象的网站.太多了吗?我很感激在这里对这个问题进行彻底的解释.
关于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.
我有这个用例,我从某个模型获得符号化的深层关联,我必须执行涉及使用外连接的某些查询.如何在不用手写完整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包含这样一个明显必要的功能将会有我永远的感激之情.
我正在为我的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.我非常确定有更好的方法,即访问一些铁路钩子,这允许我使用应用程序库加载我的库,使用应用程序初始化器加载初始化程序.我似乎无法找到它们.
我必须修补一些代码,但无法弄清楚具体如何.所以基本上,我有一个机架服务器绑定到主机名和端口.我喜欢它绑定到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)
但是这会绑定到默认端口.我怎样才能做到这一点?
编辑:由于我用错误的例子写了这个问题并没有描述我的问题,我会再做一次!
在我看来,#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)调用将"强制"计算它).
虽然我已经看到很多关于它提到这个相对简单的说法,但我还没有看到它正常工作.假设我有这个:
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 ×2
activerecord ×1
arel ×1
currying ×1
enumerable ×1
gem ×1
javascript ×1
jquery ×1
memory-leaks ×1
rack ×1
railtie ×1
sql ×1
tire ×1
unix-socket ×1