Async Rails 3.1的资产问题



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

应用程序非常简单,我所做的是:-用3.1(非rc)创建一个新的应用程序—add thin+Rack::FiberPool-设置波旁威士忌(scss混合)-运行应用程序

现在我用"rails server thin"启动服务器,之后任何请求都将在"堆栈级别太深"中结束,只有一条回溯行:/

下面是最小的应用程序:https://github.com/schmurfy/assets_crash

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

我试图深入了解问题所在,这导致我在文件template_handlers.rb中的sass-rails:

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

我试着用Pry(一个irb替代品)探索,我发现更令人困惑的是:在绑定时。我可以用

触发堆栈深度过深
{}.merge(:anything => Resolver.new(scope))

结果是直接的,但是我在那个对象中找不到任何可以解释这个结果的东西。

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

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

编辑:好了,在玩了一会儿之后,似乎真的是Rack::Fiberpool导致了这个问题。得到它回来后,我插入Rack::Fiberpool回到我的Rails堆栈…

禁用rails中的资源管道。不需要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

需要在生产环境中预编译资产。我以后再看。

相关内容

  • 没有找到相关文章

最新更新