我只是不明白.我想,Bundler的开发是为了解决宝石之间的版本冲突.因此我require "bundler/setup"知道Bundler将加载我所有宝石及其依赖项的正确版本.现在,RVM非常适合管理多个Rubies,我知道,但为什么我应该关心Gemset功能呢?我在这里想念一下吗?它能使我的开发更容易吗?也许,你们中的一些人可以给我一些关于开发和生产的完美RVM + Bundler工作流程的一些提示.
我也不知道RVM何时开始切换到另一个Ruby.我知道.rvmrc我的项目中可以有一个文件,但是我必须cd到这个目录才能进行切换吗?
此外,我通常使用Passenger进行开发,因为Passenger.prefpane在Mac OS中集成非常棒.我还能用RVM做到这一点还是有更好的方法呢?Passenger是否识别.rvmrc文件并切换到正确的Gemset?
有没有办法以应用程序接收数据的确切方式将所有传入请求转储到Sinatra应用程序?也许是某种Rack中间件?
我目前正在开发一个小型社交网络应用程序,现在我正在尝试创建一个代表用户之间友谊的模型.这是我到目前为止提出的:
class User < ActiveRecord::Base
# ...
has_many :friendships
has_many :friends, :through => :friendships
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => 'User'
end
Run Code Online (Sandbox Code Playgroud)
我的友谊模型有一个确认为布尔值的字段,我想用它来定义一个待定或确认的友谊.
如何访问特定用户的所有待处理请求?我可以使用Rails的范围方法以某种方式定义它吗?就像是
current_user.friendships.requests # => [Friendship, Friendship, ...]
Run Code Online (Sandbox Code Playgroud)
会很好.
如何使这种关联双向化?一旦确认了朋友请求,我就会添加另一个友谊,这样我的友谊表看起来就像这样:
| user_id | friend_id | confirmed |
-----------------------------------
| 1 | 2 | true |
| 2 | 1 | true |
Run Code Online (Sandbox Code Playgroud) 我被卡住了.我正在尝试动态定义一个类方法,我无法绕过ruby元类模型.考虑以下课程:
class Example
def self.meta; (class << self; self; end); end
def self.class_instance; self; end
end
Example.class_instance.class # => Class
Example.meta.class # => Class
Example.class_instance == Example # => true
Example.class_instance == Example.meta # => false
Run Code Online (Sandbox Code Playgroud)
显然,这两个方法都返回Class的实例.但这两个实例并不相同.他们也有不同的祖先:
Example.meta.ancestors # => [Class, Module, Object, Kernel]
Example.class_instance.ancestors # => [Example, Object, Kernel]
Run Code Online (Sandbox Code Playgroud)
在元类和类实例之间做出改变有什么意义?
我想,我可以send :define_method向元类动态定义一个方法,但是如果我尝试将它发送到类实例它将无法工作.至少我可以解决我的问题,但我仍然想知道它为什么这样工作.
更新2010年3月15日13:40
以下假设是否正确.
我觉得它开始对我有意义了.如果类方法中的self指向特征类,那肯定会限制你的可能性.如果是这样,就无法从类方法中定义实例方法.那是对的吗?
是否可以从其他Ruby脚本中调用在Rakefile- 而不是somefile.rake- 中定义的任务?
我希望创建一个新的Rake::Application会自动加载Rakefile来自同一目录,但似乎并非如此.这是我到目前为止提出的:
$LOAD_PATH.unshift File.dirname(__FILE__)
require 'rake'
require 'pp'
rake = Rake::Application.new
rake[:hello].invoke
Run Code Online (Sandbox Code Playgroud)
执行此代码会导致以下结果:
/opt/ruby/1.9.2-p180/lib/ruby/1.9.1/rake.rb:1720:in `[]': Don't know how to build task 'hello' (RuntimeError)
from script.rb:7:in `<main>'
Run Code Online (Sandbox Code Playgroud)
pp rake 产生以下结果:
#<Rake::Application:0x00000101118da0
@default_loader=#<Rake::DefaultLoader:0x00000101118b20>,
@imported=[],
@last_description=nil,
@loaders=
{".rb"=>#<Rake::DefaultLoader:0x00000101118a80>,
".rf"=>#<Rake::DefaultLoader:0x000001011189b8>,
".rake"=>#<Rake::DefaultLoader:0x00000101118800>},
@name="rake",
@original_dir=
"/Users/t6d/Projects/Sandbox/Ruby/rake-from-ruby-script",
@pending_imports=[],
@rakefile=nil,
@rakefiles=["rakefile", "Rakefile", "rakefile.rb", "Rakefile.rb"],
@rules=[],
@scope=[],
@tasks={},
@top_level_tasks=[],
@tty_output=false>
Run Code Online (Sandbox Code Playgroud)
它是某种刺激性即@rakefile是nil.
中欧时间5月20日下午4:40更新
在阅读了rake源代码一段时间之后,我发现你需要调用Rake :: Application#init来初始化你新创建的rake应用程序:
rake = Rake::Application.new
rake.init
rake.load_rakefile
Run Code Online (Sandbox Code Playgroud)
但是,我仍然无法调用我的Rakefile中定义的任何任务:
rake.top_level_tasks # => ["default"] …Run Code Online (Sandbox Code Playgroud) 是否可以在Latex中将字符或公式放在较大公式的其他部分下面?
foo f(x) = ...
x
Run Code Online (Sandbox Code Playgroud)
如果这个例子不清楚.我想制作一个自定义函数 - 只是\text{foo}在数学环境中定义- 看起来像sum,min或max之类的内置函数,它接受放在函数符号上方或下方的参数.
简单地使用\text{foo}_x不起作用.
给定一个复杂的对象层次结构,幸运地不包含循环引用,如何实现支持各种格式的序列化?我不是来讨论实际的实现.相反,我正在寻找可能派上用场的设计模式的提示.
更准确一点:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构.此外,应该可以将此层次结构序列化为JSON,XML和可能的HTML.
我可以使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据 - 无论是在内存中还是在文本中 - 我都想用它来构建其他东西.
我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松地支持多种XML格式.
当我在Mongo数据库上运行Map-Reduce时,我通常会得到类似于以下内容的结果:
{ _id: <some-id>, value: { <first-key>: <first-value>, ... } }
Run Code Online (Sandbox Code Playgroud)
有没有办法省略该value: { ... }部分并直接插入value结果中的内容?基本上,我希望得到如下结果:
{ _id: <some-id>, <first-key>: <first-value>, ... }
Run Code Online (Sandbox Code Playgroud)
这样我就可以将结果合并回一个遵循这种格式的现有集合.
我还有一个关于Map-Reduce的另一个问题:是否可以通过a map或reduce函数访问另一个集合?
当我使用Bundler时,是否需要将自己列为我的Gemfile中的依赖项?毕竟,我的代码中有些地方需要它.例如,当我在做Bundler设置时:require "bundler/setup"
我有一个UITableViewController,我想通知一次相应的模型的数据已经能够显示.问题是这些数据是从Web服务获取的,请求可能需要几秒钟.目前,我正在主线程上同步获取数据,这当然导致我的主线程被阻塞.现在,我不希望我的控制器知道有关从互联网下载数据的任何信息.我怎样才能做到这一点.目前,我正在考虑使用GCD并实现类似的方法,-loadDataWithCallback:并提供一个触发[tableView reloadData]成功的回调.这是一个好方法吗?是否有其他可能通知控制器模型准备好了?我的另一个想法是使用委托机制并将控制器设置为我的模型的委托?
总结一下,有什么更好的:带回调的GCD或实现自己的委托机制?
还有其他可能吗?
更新:2011年6月24日13:15 CET
阅读完所有回复后,我得出结论,我的问题有三种可能的解决方案:
利用NSNotifications并使用NSURLConnection实现异步.下载
实现自定义协议并使用委派机制.再次,用于NSURLConnection实现异步.下载.
在单独的GCD队列中使用同步下载并使用回调.
由于没有人赞成最后的解决方案,我想深入讨论这种方法.在看到通知处理中涉及的所有代码之后,我认为GCD是一种更好的方法.而不是同意某个必须以某种方式记录的通知,以便每个开发人员都知道它,我可以简单地使用回调.一方面,它给了我一个清晰的界面,就像我在使用代表时所拥有的那样,另一方面,它给了我完全的灵活性.你真的认为GCD要复杂吗?这是我的代码:
- (void)loadRestaurantsWithCallback:(void (^)())callback
{
dispatch_queue_t current_queue = dispatch_get_current_queue();
dispatch_queue_t download_queue = dispatch_queue_create("Download queue", NULL);
dispatch_async(download_queue, ^{
self.restaurants = [self loadRestaurants];
dispatch_async(current_queue, ^{ callback(); });
});
dispatch_release(download_queue);
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我的应用程序只显示我大学不同食堂的菜单.
在我的控制器中,我只是执行以下操作:
if (![self.canteen hasRestaurants]) {
[self.canteen loadRestaurantsWithCallback:^{
[self.tableView reloadData];
}];
}
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力.您对此解决方案有何看法?
更新:2011年6月24日16:30 CET
这个问题有第四种解决方案,即使它涉及的代码多于GCD方法,也可能是这样的方法.这是我想出的:
用于NSURLConnection进行异步下载.
让您的模型响应NSURLConnection实例发送的回调.
使用键值编码和键值观察.
在您的控制器中,您只需执行以下操作: …
iphone asynchronous objective-c uitableview grand-central-dispatch
ruby ×7
bundler ×2
activerecord ×1
architecture ×1
asynchronous ×1
class-method ×1
dependencies ×1
dynamic ×1
iphone ×1
latex ×1
mapreduce ×1
math ×1
metaclass ×1
mongodb ×1
objective-c ×1
passenger ×1
rack ×1
rake ×1
rvm ×1
sinatra ×1
uitableview ×1
workflow ×1