【问题标题】:Want to seed with RAILS_ENV=production, but getting NameError: uninitialized constant RSpec::Core想用 RAILS_ENV=production 播种,但得到 NameError: uninitialized constant RSpec::Core
【发布时间】:2015-05-04 10:53:13
【问题描述】:

我有以下 Rakefile:

require File.expand_path('../config/application', __FILE__)
A4aa2::Application.load_tasks

if defined? RSpec
  task(:default).clear
  task default: :'spec:fuubar'

  namespace :spec do
    desc 'Run all specs in spec directory (with Fuubar formatter)'
    RSpec::Core::RakeTask.new(:fuubar) do |task|
      task.rspec_opts = [task.rspec_opts.to_s, '--color --format Fuubar'].compact.join ' '
    end
  end
end

我明确检查了if defined? RSpec,但这并不能防止出现以下错误:

rake db:seed RAILS_ENV=production --trace
rake aborted!
NameError: uninitialized constant RSpec::Core
/Users/josh/Documents/Work/Access4All/projects/a4aa2/src/Rakefile:13:in `block in <top (required)>'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/task_manager.rb:209:in `in_namespace'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/dsl_definition.rb:147:in `namespace'
/Users/josh/Documents/Work/Access4All/projects/a4aa2/src/Rakefile:11:in `<top (required)>'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/rake_module.rb:28:in `load'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/rake_module.rb:28:in `load_rakefile'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/application.rb:689:in `raw_load_rakefile'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/application.rb:94:in `block in load_rakefile'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/application.rb:93:in `load_rakefile'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/application.rb:77:in `block in run'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling'
/Users/josh/.rvm/gems/ruby-2.1.0@a4aa2/gems/rake-10.4.2/lib/rake/application.rb:75:in `run'
/Users/josh/Documents/Work/Access4All/projects/a4aa2/src/bin/rake:4:in `<main>'

我是否也必须检查 RSpec::Core 是否已定义?无论如何,RSpec 是在生产环境中定义的吗?

我的Gemfile 看起来像这样:

group :development, :test do  
  gem 'rspec'
  gem 'rspec-rails' # RSpec for Rails

我不想将 RSpec 放入:production 组,这就是我检查RSpec 是否在Rakefile 中定义的原因,但似乎RSpec :production 中定义(虽然我只在:development:test 组中加载它),而RSpec::Core 没有。

【问题讨论】:

  • 能否使用 --trace 添加/共享错误日志?
  • 您是否检查过 Gemfile 中的“gem 'spork', github: 'sporkrb/spork'”?
  • 这和spork有什么关系?
  • 是您 gemfile 中测试组中的 rspec gem 吗?

标签: ruby-on-rails ruby rspec seeding


【解决方案1】:

确保gem rspecGemfile 中的:test 组内。

:test 组之外使用 rspec:

> puts "RSpec defined" if defined? RSpec
RSpec defined
 => nil 

:test 组内带有 rspec:

> puts "RSpec defined" if defined? RSpec
 => nil 

【讨论】:

    【解决方案2】:

    您可以通过检查适当的环境来完全避免这个问题,例如unless Rails.env.production?

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多