1

我有一个旧的 Rails 项目,我需要对其进行更改甚至更新。

我的宝石列表如下所示:

*** LOCAL GEMS ***

actionmailer (2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
actionpack (2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
activerecord (2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
activeresource (2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
activesupport (3.2.9, 2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
addressable (2.3.2)
BlueCloth (1.0.1)
bourne (1.1.2)
bundler (1.2.3)
childprocess (0.3.6)
ffi (1.2.0)
i18n (0.6.1)
json (1.7.5)
libwebsocket (0.1.7.1)
metaclass (0.0.1)
mocha (0.10.5)
multi_json (1.5.0)
mysql (2.8.1)
paperclip (2.3.1.1)
rack (1.1.3, 1.0.1)
rails (2.3.14, 2.3.2)
rake (0.8.7)
rdoc (3.12)
restful_authentication (1.1.6)
rspec (1.3.1)
ruby-net-ldap (0.0.4)
rubygems-bundler (1.1.0)
rubyzip (0.9.9)
rvm (1.11.3.5)
selenium-client (1.2.18)
selenium-webdriver (2.27.2)
shoulda (2.11.3)
shoulda-context (1.0.2)
shoulda-matchers (1.4.2)
thoughtbot-shoulda (2.11.1)
websocket (1.0.6)

当我跑步时,rake test我得到:

/Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/activesupport-2.3.14/lib/active_support/dependencies.rb:469:in `load_missing_constant': uninitialized constant AuthenticatedTestHelper (NameError)
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/activesupport-2.3.14/lib/active_support/dependencies.rb:106:in `const_missing'
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/activesupport-2.3.14/lib/active_support/dependencies.rb:118:in `const_missing'
    from ./test/test_helper.rb:4
    from ./test/functional/admin/articles_controller_test.rb:1:in `require'
    from ./test/functional/admin/articles_controller_test.rb:1
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `load'
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `each'
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5
/Users/noah/.rvm/rubies/ruby-1.8.7-p371/bin/ruby -I"lib:test" "/Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb"  
Errors running test:units and test:functionals!

这是我的测试助手的第一部分:

ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'
include AuthenticatedTestHelper

任何include AuthenticatedTestHelper包含它的地方都会失败。关于为什么会这样的任何想法?

更新:

我相信我的问题是restful_authentication 无法生成提供AuthenticatedTestHelper 的文件。

在依赖项内部,我有以下内容:

qualified_name = qualified_name_for from_mod, const_name
      path_suffix = qualified_name.underscore
      name_error = NameError.new("uninitialized constant #{qualified_name}")

      file_path = search_for_file(path_suffix)
      if file_path && ! loaded.include?(File.expand_path(file_path)) # We found a matching file to load
        require_or_load file_path
        raise LoadError, "Expected #{file_path} to define #{qualified_name}" unless uninherited_const_defined?(from_mod, const_name)
        return from_mod.const_get(const_name)
      elsif mod = autoload_module!(from_mod, const_name, qualified_name, path_suffix)
        return mod
      elsif (parent = from_mod.parent) && parent != from_mod &&
            ! from_mod.parents.any? { |p| uninherited_const_defined?(p, const_name) }
        # If our parents do not have a constant named +const_name+ then we are free
        # to attempt to load upwards. If they do have such a constant, then this
        # const_missing must be due to from_mod::const_name, which should not
        # return constants from from_mod's parents.
        begin
          return parent.const_missing(const_name)
        rescue NameError => e
          raise unless e.missing_name? qualified_name_for(parent, const_name)
          raise name_error
        end
      else
        puts file_path #added this line
        raise name_error
      end
    end

我已经添加了 puts file_path 这行,这是 nil,所以 rails 也不知道这个文件在哪里。有任何想法吗?

4

1 回答 1

1

通常这个模块应该在lib/authenticated_test_helper.rb

如果您找不到它或在其他地方找不到它,您可以简单地在该文件中创建一个空模块,然后逐步实现或存根它。

但是,如果您打算升级到 Rails 3,则无论如何都必须选择另一个身份验证框架(Authlogic、Devise),因为restful_authentication它似乎不适用于 Rails 3。

PS:来自的代码dependencies.rb对您没有帮助。它只包含从常量派生文件名的代码(在您的情况下为模块)它只是失败了,因为您authenticated_test_helper在加载路径中没有命名文件。

于 2012-12-21T20:19:00.707 回答