代码之家  ›  专栏  ›  技术社区  ›  brad

轨道2.3.5螺纹安全!打破我的迁移

  •  0
  • brad  · 技术社区  · 14 年前

    我正在使用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
    

    投掷A:

    uninitialized constant AddSuperAdminRole::Role
    

    它在dev环境中工作得很好,因为我没有运行多线程,所以我知道这就是问题所在。我也曾尝试过加载应用程序/模型路径,但没有成功。如何使用线程安全运行迁移?

    2 回复  |  直到 14 年前
        1
  •  1
  •   brad    14 年前

    升级到2.3.10解决了这个问题。

        2
  •  0
  •   rwilliams    14 年前

    从票 #2506 在铁路灯塔遗址。下面我将threadsafe方法链接到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
    

    以下是Joshua Peek在对罚单的评论中对问题的回应:

    我建议你要模特 在迁移中需要的,或者 更好地包括模型定义 同样,这样迁移就不依赖于 关于它的存在。