CSS Spriting可以真正帮助提高性能,但它并不是最容易阅读和维护的东西.是否有任何工具可以让我单独编码图像但是将它们聚合起来并用蒙太奇的正确子集替换HTML?
我特意想的是一个Ruby on Rails插件,但是如果有另一种语言的包,我会很乐意移植它.
在rails开发环境中,cache_classes关闭以便您可以修改代码app/并查看更改而无需重新启动服务器.
但是,在所有环境中,中间件只创建一次.所以,如果我有这样的中间件:
class MyMiddleware
def initialize(app)
@app = app
end
def call(env)
env['model'] = MyModel.first
end
end
Run Code Online (Sandbox Code Playgroud)
我这样做config/environments/development.rb:
config.cache_classes = false # the default for development
config.middleware.use MyMiddleware
Run Code Online (Sandbox Code Playgroud)
然后我总会得到以下错误:
A copy of MyMiddleware has been removed from the module tree but is still active!
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:414:in `load_missing_constant'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:96:in `const_missing'
/Users/me/projects/my_project/lib/my_middleware.rb:8:in `call'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/middleware_stack.rb:72:in `new'
...
Run Code Online (Sandbox Code Playgroud)
问题是MyMiddleware实例是在系统加载时创建的,但是MyModel每次调用时都会重新加载该类.
我试图'MyModel'.constantize.first延迟绑定到类,直到方法调用时间,但这会将问题更改为新的问题:
You have a nil object when you didn't expect it!
The error occurred …Run Code Online (Sandbox Code Playgroud) 我正在使用似乎是创建连接视图的常用技巧:
// a Customer has many Orders; show them together in one view:
function(doc) {
if (doc.Type == "customer") {
emit([doc._id, 0], doc);
} else if (doc.Type == "order") {
emit([doc.customer_id, 1], doc);
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用以下查询来获取单个customer和所有相关的Orders:
?startkey=["some_customer_id"]&endkey=["some_customer_id", 2]
Run Code Online (Sandbox Code Playgroud)
但现在我已经绑我的查询非常密切合作,以我的视图代码.有什么价值我可以把我的" 2"更清楚地说,"我希望一切都与这个客户联系在一起"?我想我已经看过了
?startkey=["some_customer_id"]&endkey=["some_customer_id", {}]
Run Code Online (Sandbox Code Playgroud)
但我不知道那{}是一定的排序后一切.
感谢cmlenz的连接方法.
关于整理的CouchDB维基页面的进一步说明:
该查询
startkey=["foo"]&endkey=["foo",{}]将匹配大多数数组键与第一个元素中的"foo",例如["foo","bar"]和["foo",["bar","baz"]].但它不会匹配["foo",{"an":"object"}]
所以排序顺序{}是晚了,但绝对不是最后的.
我发现的一些选项是
我更喜欢GitHub上的项目,因为这使我最容易分叉和推送修复.所有这些都符合这一要求.
我已经习惯了Rails,所以我喜欢像ActiveRecord模型那样的东西.另一方面,我也不想在我和Couch之间做太多 - 毕竟,我使用它作为我的数据库是有原因的.
最后,它们似乎都得到了相当积极的维护(可能除外couch_foo).
所以我认为这归结为(诚然和不幸)主观:任何人都有与他们相处的好坏经历?
我有两个资源都具有相同的子资源:
App.Router.map(function() {
this.resource('post', function() {
this.resource('comments', function() {
this.route('new');
});
});
this.resource('product', function() {
this.resource('comments', function() {
this.route('new');
});
});
});
Run Code Online (Sandbox Code Playgroud)
问题是,ember路由器只根据当前和父路由构建路由对象的名称,而不是整个层次结构.因此,它会尝试路线都/posts/:id/comments/new和/products/:id/comments/new到App.NewCommentRoute对象.我该怎么做才能解决这个问题?
这篇文章改编自GitHub问题.
我不禁要问,但我的客户端可能不会提供其他SQL(或类似SQL)的解决方案.我知道Access有一些SQL钩子; 他们是否足够基本的ActiveRecord?
后来:
我很欣赏使用其他数据库的所有建议,但请相信我:我已经尝试说服他们.有一个"已批准"列表,并且没有SQL数据库.将某些内容列入清单可能需要一年多的时间,此项目将在三周内完成.
在Ruby 1.8及更早版本中,
Foo
Run Code Online (Sandbox Code Playgroud)
是常量(类,模块或其他常量).而
foo
Run Code Online (Sandbox Code Playgroud)
是一个变量.关键区别如下:
module Foo
bar = 7
BAZ = 8
end
Foo::BAZ
# => 8
Foo::bar
# NoMethodError: undefined method 'bar' for Foo:Module
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但Ruby 1.9 允许使用UTF-8源代码.那么就?这个而言,"大写"还是"低级"呢?那么?(严格的子集)还是?foo?
有一般规则吗?
后来:
Ruby-core已经在考虑一些数学运算符.例如
module Kernel
def ?(num)
...
end
def ?(*args)
...
end
end
Run Code Online (Sandbox Code Playgroud)
会允许的
x = ?2
y = ?(1, 45, ...)
Run Code Online (Sandbox Code Playgroud)
我愿意去看
my_proc = ? { |...| ... }
x ? my_enumerable # same as my_enumerable.include?(x)
my_infinite_range = (1..?)
return 'foo' …Run Code Online (Sandbox Code Playgroud) 这是问题的一个完美示例:分类器gem打破了Rails.
**原始问题:**
作为一名安全专家,我担心的一件事是Ruby没有Java的包隐私.也就是说,这不是有效的Ruby:
public module Foo
public module Bar
# factory method for new Bar implementations
def self.new(...)
SimpleBarImplementation.new(...)
end
def baz
raise NotImplementedError.new('Implementing Classes MUST redefine #baz')
end
end
private class SimpleBarImplementation
include Bar
def baz
...
end
end
end
Run Code Online (Sandbox Code Playgroud)
能够防止Foo :: BarImpl的猴子修补真的很棒.这样,依赖图书馆的人就知道没人搞错了.想象一下,如果有人改变了你的MD5或SHA1的实现!我可以调用freeze这些类,但我必须在逐个类的基础上进行调试,而其他脚本可能会在我完成保护应用程序之前修改它们,如果我对加载顺序不是很谨慎的话.
Java为防御性编程提供了许多其他工具,其中许多工具在Ruby中是不可能的.(请参阅Josh Bloch的书以获得一个好名单.)这真的是一个问题吗?我应该停止抱怨并使用Ruby来实现轻量级的东西而不是希望"企业就绪"的解决方案吗?
(不,默认情况下,核心类没有在Ruby中冻结.见下文:)
require 'md5'
# => true
MD5.frozen?
# => false
Run Code Online (Sandbox Code Playgroud) 为了减少我的小Rails应用程序中的代码重复,我一直在努力将我的模型之间的公共代码添加到它自己的独立模块中,到目前为止一直很好.
模型的东西相当简单,我只需要在开头包含模块,例如:
class Iso < Sale
include Shared::TracksSerialNumberExtension
include Shared::OrderLines
extend Shared::Filtered
include Sendable::Model
validates_presence_of :customer
validates_associated :lines
owned_by :customer
def initialize( params = nil )
super
self.created_at ||= Time.now.to_date
end
def after_initialize
end
order_lines :despatched
# tracks_serial_numbers :items
sendable :customer
def created_at=( date )
write_attribute( :created_at, Chronic.parse( date ) )
end
end
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是,现在,我将要有一些控制器和视图代码,这些代码在这些模型之间也是常见的,到目前为止,我有这个用于我的可发送内容:
# This is a module that is used for pages/forms that are can be "sent"
# either via fax, email, or printed.
module Sendable
module Model …Run Code Online (Sandbox Code Playgroud) 情况就是这样.
我正在编写一个Rails应用程序,它将监视某些特定数据库的数据质量.为了做到这一点,我需要能够在这些数据库上执行直接的SQL查询 - 这当然与用于驱动Rails应用程序模型的数据库不同.简而言之,这意味着我无法使用通过ActiveRecord基本连接的技巧.
我需要连接的数据库在设计时是不知道的(即:我不能将它们的详细信息放在database.yaml中).相反,我有一个模型'database_details',用户将使用该模型输入应用程序将在运行时执行查询的数据库的详细信息.
因此,与这些数据库的连接确实是动态的,并且细节仅在运行时解析.
我怎样才能做到这一点?
谢谢,
罗洛
ruby ×8
activerecord ×2
couchdb ×2
javascript ×2
css ×1
dry ×1
ember-router ×1
ember.js ×1
encoding ×1
mapreduce ×1
middleware ×1
ms-access ×1
optimization ×1
refactoring ×1
security ×1
utf-8 ×1