Async Rails 3.1 проблема с активами - PullRequest
2 голосов
/ 05 сентября 2011

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

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

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

Вот минимальное приложение: 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))

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

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

Ответы [ 3 ]

1 голос
/ 16 сентября 2011

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

0 голосов
/ 24 ноября 2011

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

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

0 голосов
/ 15 сентября 2011

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

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

...