Rails 2.3.5 потокобезопасен! ломает мои миграции - PullRequest
0 голосов
/ 09 ноября 2010

Я использую jruby-1.5.3 с приложением rails 2.3.5. Я только начал играть с безопасностью потоков, используя:

config.threadsafe!
config.eager_load_paths << "#{RAILS_ROOT}/lib"

Что работает хорошо, однако я только что заметил при развертывании в моей промежуточной среде (которая имеет ту же конфигурацию, что и рабочая), что я получаю неопределенные константы. Например, миграция, которая добавляет другую роль в таблицу ролей:

class AddSuperAdminRole < ActiveRecord::Migration
  def self.up
    Role.create :rolename => 'super_admin'
  end
end

бросает:

uninitialized constant AddSuperAdminRole::Role

Он отлично работает в среде разработчика, потому что я не запускаю многопоточный, так что я знаю, что это проблема. Я пытался загрузить путь приложения / модели также, но это не сработало. Как запустить миграцию с безопасностью потоков?

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

обновление до 2.3.10 исправило это.

0 голосов
/ 09 ноября 2010

Из билета # 2506 на сайте Rails Lighthouse. Ниже я связал потокобезопасный метод в Rails. Вы увидите, что для config.dependency_loading установлено значение false, поскольку оно не является поточно-ориентированным, и поэтому миграции получают свои зависимости автоматически загруженными.

# Enable threaded mode. Allows concurrent requests to controller actions and
# multiple database connections. Also disables automatic dependency loading
# after boot, and disables reloading code on every request, as these are
# fundamentally incompatible with thread safety.
    def threadsafe!
      self.preload_frameworks = true
      self.cache_classes = true
      self.dependency_loading = false
      self.action_controller.allow_concurrency = true
      self
    end

Вот ответ Джошуа Пика на проблему в комментариях к билету:

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

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