Async Rails 3.1资产问题

时间:2011-09-05 19:13:45

标签: asynchronous ruby-on-rails-3.1 eventmachine ruby-1.9.2

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

应用程序非常简单,我所做的是: - 使用3.1(非rc)创建一个新的应用程序 - 添加瘦+ 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))

结果立竿见影,但我找不到任何可以解释结果的对象。

欢迎任何领导。

3 个答案:

答案 0 :(得分:1)

我终于找到了答案:光纤只有4Kb的堆栈空间,Ruby on Rails现在太大了,不适合这个空间:/

答案 1 :(得分:0)

我遇到了同样的问题,将我的红宝石升级到了1.9.3-preview1,并且现在所有的宝石都可以实现。

编辑: 好好玩了一下后,看起来好像Rack :: Fiberpool会导致这个问题。我将Rack :: Fiberpool插回到我的Rails堆栈后得到了回复......

答案 2 :(得分:0)

禁用rails中的资产pipline。不需要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

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