Проблема Async Rails 3.1 с активами

У меня проблема с активами в асинхронном приложении rails 3.1, мне удалось создать минимальный пример, показывающий мою проблему, но это мне мало помогло.

Приложение очень простое, что я сделал: - создал новое приложение с 3.1 (не rc) - добавил thin+Rack::FiberPool - настроил bourbon (scss mixins) - запустил приложение

Теперь я запускаю сервер с «тонким сервером rails», после чего любой запрос окажется на «слишком глубоком уровне стека» только с одной строкой обратной трассировки:/

Вот минимальное приложение: https://github.com/schmurfy/assets_crash.

Вот трассировка, которую я получаю при выполнении запроса: http://dl.dropbox.com/u/1313066/github/crash_assets.png

Я попытался покопаться, чтобы увидеть, где была проблема, которая привела меня в sass-rails в файле template_handlers.rb:

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))

Результат мгновенный, но я не могу найти в этом объекте ничего, что могло бы объяснить результат.

Любое руководство будет приветствоваться.


person Schmurfy    schedule 05.09.2011    source источник
comment
Вы сделали что-то в своей системе, чтобы показать, что стек волокна переполнен (4 КБ), или вы нашли в документации?   -  person thierry.henrio    schedule 13.10.2011


Ответы (3)


Наконец-то я нашел ответ: у волокон есть только 4 КБ пространства стека, а Ruby on Rails теперь слишком велик, чтобы поместиться в это пространство :/

person Schmurfy    schedule 16.09.2011

У меня была та же проблема, я обновил свой ruby ​​​​до 1.9.3-preview1 и построил все свои драгоценные камни с нуля, теперь все работает.

РЕДАКТИРОВАТЬ: ОК, поиграв с ним немного больше, действительно кажется, что Rack::Fiberpool вызывает эту проблему. Получил его обратно после того, как вставил Rack::Fiberpool обратно в свой стек Rails...

person sjaq    schedule 15.09.2011

Отключить конвейер ресурсов в рельсах. Не требуйте sass-rails, вместо этого потребуйте sass и sprockets в Gemfile. Вот мой 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

Он должен предварительно скомпилировать активы в производстве. Я посмотрю на это позже.

person Anton Orel    schedule 24.11.2011
comment
интересная идея, никогда не думал об этом. Удалось ли вам заставить мое тестовое приложение работать с этим? - person Schmurfy; 26.11.2011