【问题标题】:Error when run server rails 2.3.5 with memcached使用 memcached 运行服务器 rails 2.3.5 时出错
【发布时间】:2016-05-26 12:45:58
【问题描述】:

我使用 ruby​​ 版本 1.8.7、gem 版本 1.3.5、rails 版本 2.3.5 和 memcache。运行服务器时出现此错误

phuongnm-lap:~/trunk/hurricane$ ruby script/server
=> Booting Mongrel
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
/home/asiantech/.rvm/gems/ruby-1.8.7-p374/gems/bundler-1.11.2/lib/bundler/runtime.rb:77:in `require': /home/asiantech/trunk/hurricane/vendor/bundle/ruby/1.8/gems/get_process_mem-0.2.0/lib/get_process_mem.rb:60: undefined (?...) sequence: /(?<value>(\d*\.{0,1}\d+))\s+(?<unit>\w\w)/ (SyntaxError)
    from /home/asiantech/.rvm/gems/ruby-1.8.7-p374/gems/bundler-1.11.2/lib/bundler/runtime.rb:77:in `require'
    from /home/asiantech/.rvm/gems/ruby-1.8.7-p374/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `each'
    from /home/asiantech/.rvm/gems/ruby-1.8.7-p374/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `require'
    from /home/asiantech/.rvm/gems/ruby-1.8.7-p374/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `each'
    from /home/asiantech/.rvm/gems/ruby-1.8.7-p374/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `require'
    from /home/asiantech/.rvm/gems/ruby-1.8.7-p374/gems/bundler-1.11.2/lib/bundler.rb:99:in `require'
    from ./script/../config/boot.rb:41:in `load_gems'
    from /home/asiantech/trunk/hurricane/vendor/bundle/ruby/1.8/gems/rails-2.3.5/lib/initializer.rb:164:in `process'
    from /home/asiantech/trunk/hurricane/vendor/bundle/ruby/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `send'
    from /home/asiantech/trunk/hurricane/vendor/bundle/ruby/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `run'
    from /home/asiantech/trunk/hurricane/config/environment.rb:34
    from /home/asiantech/trunk/hurricane/vendor/bundle/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
    from /home/asiantech/trunk/hurricane/vendor/bundle/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
    from /home/asiantech/trunk/hurricane/vendor/bundle/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:521:in `new_constants_in'
    from /home/asiantech/trunk/hurricane/vendor/bundle/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
    from /home/asiantech/trunk/hurricane/vendor/bundle/ruby/1.8/gems/rails-2.3.5/lib/commands/server.rb:84
    from script/server:3:in `require'
    from script/server:3

请帮帮我!

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您的 ruby​​ 版本太旧,get_process_mem gem 无法运行。 gem 使用 complex regular expression 来解析来自您的 linux 服务器上的 /proc 文件的信息。但是,ruby 1.8.7 还不支持这种复杂的正则表达式。

    您可以在 irb 中亲自查看。在 ruby​​ 1.8.7 中匹配失败:

    "aaa" =~ /(?<value>(\d*\.{0,1}\d+))\s+(?<unit>\w\w)/
    # => SyntaxError: compile error
    # => (irb):1: undefined (?...) sequence: /(?<value>(\d*\.{0,1}\d+))\s+(?<unit>\w\w)/
    

    而在 ruby​​ 2.2 下它工作正常(在此测试用例中不返回任何内容,但更重要的是,不会因错误而失败):

    "aaa" =~ /(?<value>(\d*\.{0,1}\d+))\s+(?<unit>\w\w)/
    # => nil
    

    你现在有几个选择:

    • 如果可以的话,升级到较新的 ruby​​(和 rails),您将不必解决这些与代码相关的老问题,也不会再使用不受支持的 ruby​​/rails 版本,但这仍然是一个繁琐的过程。
    • 摆脱get_process_mem gem。您可以使用命令行实用程序查看相同的信息,即进程消耗的内存,而无需安装任何 gem。 例如尝试tophtop 命令。

    【讨论】:

    • 感谢您的回复。我了解我的问题
    猜你喜欢
    • 2018-07-07
    • 2014-10-31
    • 2017-11-07
    • 2012-07-31
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多