【问题标题】:How to test a Rails engine which should support both Rails 3 and Rails 4?如何测试应该同时支持 Rails 3 和 Rails 4 的 Rails 引擎?
【发布时间】:2014-12-09 22:01:10
【问题描述】:

我正在研究 Rails 引擎。我已经生成了一个 Rails 4 引擎并开始进行测试。我添加了 appraisals gem 作为开发依赖项,以便我可以测试多个版本的 Rails。这是我的Appraisals 文件:

appraise 'rails-3.2' do
  gem 'rails', '~> 3.2.0'
end

appraise 'rails-4.0' do
  gem 'rails', '~> 4.0.0'
end

appraise 'rails-4.1' do
  gem 'rails', '~> 4.1.0'
end

当我运行 bundle exec appraisals rake 时,我收到 Rails 3 版本的错误:

NoMethodError: undefined method `configure' for #<TestApp::Application:0x007fc7ac2db718>

我认为这是因为 Rails 3 和 Rails 4 之间的 API 发生了变化。

我的问题是:我应该如何设置我的引擎来测试和支持多个版本的 Rails?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 rails-engines


    【解决方案1】:

    如果您想深入了解源代码,可以查看 Upmin,它测试多个版本的 Rails:

    https://github.com/upmin/upmin-admin-ruby

    可能与 4.0 和 4.1 之间的这种差异有关(搜索“配置”)?

    http://railsdiff.org/diff/v4.0.0/v4.1.0/

    (您也可以在 Upmin 配置文件中看到这种差异。)

    【讨论】:

      【解决方案2】:

      你可能不得不用一些条件来丑化你的配置。你应该可以访问Rails::VERSION

      例如,我有一个支持 Rails 4.1 和 4.2 的 Rails 引擎。在 4.2 中他们引入了config.active_record.raise_in_transactional_callbacks,所以我的假人application.rb 有:

      if Rails::VERSION::MAJOR >= 4 && Rails::VERSION::MINOR >= 2
        config.active_record.raise_in_transactional_callbacks = true
      end
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-20
        • 1970-01-01
        • 2011-06-19
        • 2012-07-18
        • 1970-01-01
        相关资源
        最近更新 更多