2011-09-05 101 views
2

我在异步rails 3.1应用程序上的资产有问题,我设法构建了一个显示我的问题的最小示例,但它对我没有多大帮助。Async Rails 3.1资产问题

该应用程序是非常简单的,我所做的就是: - 创建3.1(非RC)提出新的申请 - 添加薄+机架式:: FiberPool - 设置波旁(SCSS混入) - 运行应用程序

现在我开始用“轨服务器瘦”的服务器,在这之后的任何请求将在结束了“堆栈层次过深”,只有一个回溯行:/

这里是最小的应用:https://github.com/schmurfy/assets_crash

这里是回溯做的请求时,我得到: http://dl.dropbox.com/u/1313066/github/crash_assets.png

我试图挖,看看问题出在哪里了,害得我在文件template_handlers.rb SASS护栏:

def sass_options(scope) 
    importer = self.importer(scope) 
    options = sass_options_from_rails(scope) 
    load_paths = (options[:load_paths] || []).dup 
    load_paths.unshift(importer) 
    # bnding.pry 
    options.merge(
    :filename => eval_file, 
    :line => line, 
    :syntax => syntax, 
    :importer => importer, 
    :load_paths => load_paths, 
    :custom => { 
     :resolver => Resolver.new(scope) 
    } 
) 
end 

我试着用撬(IRB的替代)和我发现了什么是更令人不解的探索:虽然在binding.pry行我可以触发栈水平太深:

{}.merge(:anything => Resolver.new(scope)) 

结果是立竿见影的,但我无法找到该物体中的任何东西这将解释结果。

任何铅将受到欢迎。

+0

你是否在系统上做了一些事情来显示光纤堆栈已经飞过(4kb)或者你在文档中发现了什么? –

+1

起初,这是一个想法,然后由http://redmine.ruby-lang.org/issues/3187确认。之后,为了确定我编译了一个自定义ruby 1.9.2,我改变了定义堆栈大小的常量(我发现它很快,因为我知道要搜索什么),并且我的测试应用程序使用它:/ – Schmurfy

回答

1

我终于找到了答案:光纤只有4Kb的堆栈空间,而且Ruby on Rails现在太大而无法适应此空间:/

0

我有同样的问题,我的红宝石升级到1.9.3-preview1,并从头开始建立我所有的宝石,现在一切正常。

编辑: 好了之后玩了一会儿,它真的好像Rack :: Fiberpool导致这个问题。在将Rack :: Fiberpool插回到我的Rails堆栈后,将其取回回来:

0

禁用轨道中的资产管道。不需要sass-rails,而是需要Gemfile中的sass和sprockets。这里是我的config.ru服务资产:

require ::File.expand_path('../config/environment', __FILE__) 

Sass::Engine::DEFAULT_OPTIONS[:load_paths].tap do |load_paths| 
    load_paths << "app/assets/stylesheets" 
    load_paths << Compass::Frameworks['compass'].stylesheets_directory 
    load_paths << Compass::Frameworks['twitter_bootstrap'].stylesheets_directory 
end 

builder = Rack::Builder.new do 
    map '/assets' do 
    environment = Sprockets::Environment.new 
    environment.append_path 'app/assets/javascripts' 
    environment.append_path 'app/assets/stylesheets' 
    run environment 
    end 

    map '/' do 
    use Rack::FiberPool, :size => 250 
    run YourApp::Application 
    end 
end 
run builder 

它需要预编译生产资产。我稍后会看。

+0

有趣的想法,从来没有想到这一点。您是否设法让我的测试应用程序适用于此? – Schmurfy