未初始化的常量Logger :: Application

时间:2015-03-24 16:13:45

标签: ruby-on-rails ruby

当我将我的项目从GitHub克隆到具有这些版本的另一台OSX计算机时:

$ ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin13]
$ rails -v
Rails 4.2.1
$ rvm -v
rvm 1.26.10 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

使用bundle install,然后bin/rails server运行本地测试环境,我得到:

<rubyjedi>/lib/soap/rpc/httpserver.rb:21:in `<module:RPC>': uninitialized constant Logger::Application (NameError)
    from <rubyjedi>/lib/soap/rpc/httpserver.rb:18:in `<module:SOAP>'

为了便于阅读,我已将完整路径~/.rvm/gems/ruby-2.2.0/gems/rubyjedi-soap4r-1.5.8.20100619003610替换为<rubyjedi>

无数的谷歌搜索告诉我,有问题的文件中缺少require 'logger',但该文件已有该行:

require 'logger'
require 'soap/attrproxy'
require 'soap/rpc/soaplet'
require 'soap/streamHandler'
require 'webrick'

module SOAP
module RPC

class HTTPServer < Logger::Application
    # ...
end

有关导致此问题的原因的任何见解?我没有在我的第一台计算机上遇到这个问题(也是OSX,而​​不是我当前的。)

2 个答案:

答案 0 :(得分:1)

Ruby 2.2删除了Logger :: Application,因此您现在需要自己启动它。这个答案是关闭那些在各种宝石上遇到这个问题并正在寻求补救的人。

在Gemfile中(如果使用Bundler),添加对logger-application gem

的引用
gem 'logger-application'

然后,在问题代码中,在需要记录器本身之后需要logger-application:

require 'logger'
require 'logger-application' unless defined?(Logger::Application)
顺便说一下,既然你正在使用我的Soap4R分支 - 请在一周内查看我的github repo,因为我正处于主要代码刷新工作的中间。除了与版本相关的修复,您还可以通过Nokogiri和Ox Parsers期待更快的XML处理选项。

答案 1 :(得分:0)

问题在于环境。对于rvm,我似乎无法解决问题,所以removing rvm然后switching to rbenv fixes我的麻烦(假设您已经安装了Homebrew):

brew install rbenv ruby-build

# Add rbenv to bash so that it loads every time you open a terminal
echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
source ~/.bash_profile

# Install Ruby
rbenv install 2.2.1
rbenv global 2.2.1
# Verify Installation
ruby -v

# Install Rails
gem install rails -v 4.2.0
# Expose to bash
rbenv rehash
# Verify installation
rails -v