Как правильно загрузить модули / классы из lib / при использовании config.threadsafe!вариант? - PullRequest
5 голосов
/ 26 июля 2010

Я работаю над тем, чтобы наше приложение Rails 2.3.8 работало правильно под JRuby.Все прекрасно работает, пока я не включу config.threadsafe! для достижения параллелизма, который предлагает JRuby.Это привело к тому, что модули и классы в lib / больше не загружались автоматически.

с config.threadsafe!включено:

$ ruby script/runner -e production 'p Sim::Sim200Provisioner'

/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in `const_missing': uninitialized constant Sim::Sim200Provisioner (NameError)
    from (eval):1

с config.threadsafe!отключено:

$ ruby script/runner -e production 'p Sim::Sim200Provisioner'
Sim::Sim200Provisioner

Файл, о котором идет речь, lib / sim / sim200_provisioner.rb где Sim - app / models / sim.rb .У Rails обычно нет проблем с поиском и загрузкой файла.

Нужно ли мне вручную требовать всех наших библиотек или есть ли более Rails-подобный способ справиться с этим, которого мне не хватает?

Ответы [ 3 ]

7 голосов
/ 27 июля 2010

В документации из threadsafe! упоминается, что она отключает автоматическую загрузку зависимостей.Причина в том, что при загрузке файлов могут возникнуть условия гонки, если два или несколько потоков решат, что им по-прежнему не хватает определенного класса.

Вместо этого вам следует require вручную все файлы, которые вам нужны1007 *.

0 голосов
/ 22 сентября 2010

Ссылка на документацию не содержит никакой информации, поэтому вот соответствующий документ для #threadsafe! :

Включить многопоточный режим. Позволяет одновременные запросы к контроллеру действия и несколько баз данных соединения. Также отключает автоматический загрузка зависимостей после загрузки и отключает перезагрузку кода на каждом запрос, так как это принципиально несовместимо с безопасностью резьбы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...