2

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

该应用程序非常简单,我所做的是: - 使用 3.1(非 rc)创建一个新应用程序 - 添加 Thin+Rack::FiberPool - 设置波旁威士忌(scss mixins) - 运行应用程序

现在我用“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 替代方案)进行探索,但我发现更令人费解的是:在 binding.pry 行中,我可以通过以下方式触发堆栈级别太深:

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

结果是立竿见影的,但我在该对象中找不到任何可以解释结果的东西。

欢迎任何线索。

4

3 回答 3

1

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

于 2011-09-16T12:37:40.933 回答
0

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

编辑:好吧,在玩了一会儿之后,看起来好像是 Rack::Fiberpool 导致了这个问题。在我将 Rack::Fiberpool 插入到我的 Rails 堆栈中后得到它......

于 2011-09-15T13:00:33.873 回答
0

在 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

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

于 2011-11-24T17:38:02.607 回答