正如马修在他的回答中指出的那样,可能是一个插件导致了这种情况。他发现attachment_fu是一个原因。(它可以使用 Core Image 进行图像处理。)使用此行在(用于 Rails 应用程序)中创建文件config/initializers
将使警告静音,但需要其他图像处理器之一:
Technoweenie::AttachmentFu.default_processors.delete('CoreImage')
这对我来说不是问题;我部署到非 Mac 服务器上,因为这些服务器不能使用 CoreImage,所以无论如何我想在开发过程中运行相同的东西。
如果您查看/System/Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/
objc/ruby_addition.rb
,这是在文件的底部:
class Thread
class << self
alias :pre_rubycocoa_new :new
# Override Thread.new to prevent threads being created if there isn't
# runtime support for it
def new(*args,&block)
unless defined? @_rubycocoa_threads_allowed then
# If user has explicilty disabled thread support, also disable the
# check (for debugging/testing only)
@_rubycocoa_threads_allowed = ENV['RUBYCOCOA_THREAD_HOOK_DISABLE'] ||
OSX::RBRuntime.isRubyThreadingSupported?
end
if !@_rubycocoa_threads_allowed then
warn "#{caller[0]}: Ruby threads cannot be used in RubyCocoa without patches to the Ruby interpreter"
end
pre_rubycocoa_new(*args,&block)
end
end
end
所以对于初学者来说,我们会收到一个警告,但它会继续调用原来Thread.new
的。我不相信这个警告是一个真正的问题。在控制台中不断看到它只是很烦人。
如果您想追踪猴子补丁中的内容Thread
,请使用 grep 查找拉入的内容osx/cocoa
:
$ irb
>> Thread.new { puts 'hi' }
hi=> #<Thread:0x1011328e0 run>
>> require 'osx/cocoa'
=> true
>> Thread.new { puts 'hi' }
(irb):3:in `irb_binding': Ruby threads cannot be used in RubyCocoa without patches to the Ruby interpreter
hi=> #<Thread:0x103bf76e8 run>