【问题标题】:How to "require" manually installed gems (KDE plasmoid)?如何“要求”手动安装 gem(KDE plasmoid)?
【发布时间】:2011-05-22 15:51:51
【问题描述】:

我正在尝试为 KDE 编写一个 Ruby plasmoid。我只需要使用一颗红宝石。每当我写require 'dbus' 时,它都会抛出一个错误:

code/main.rb:6:in 'require': no such file to load -- dbus (LoadError) code/main.rb:6:in '<module:TestApp>' code/main.rb:5:in '<top (required)>' /usr/share/apps/plasma_scriptengine_ruby/applet.rb:177:in 'load' /usr/share/apps/plasma_scriptengine_ruby/applet.rb:177:in 'init' /usr/share/apps/plasma_scriptengine_ruby/applet.rb:201:in 'constraintsEvent': undefined method 'constraintsEvent' for nil:NilClass (NoMethodError) /usr/share/apps/plasma_scriptengine_ruby/applet.rb:201:in 'constraintsEvent': undefined method 'constraintsEvent' for nil:NilClass (NoMethodError)

实际上,正常的“ruby main.rb”运行良好(关于“require”部分),但使用“plasmoidviewer”测试 plasmoid 失败。请注意,来自标准 Ruby 安装的常规 gem 运行良好,即 require 'Qt4'require 'yaml' 可以完美加载。我在 Linux 下使用 Ruby 1.9.2p180。

09:40 PM - 更新:Richard Dale,QtRuby 开发人员之一,几分钟前刚刚解决了这个问题。下一个 KDE 版本将有 QtRuby 的补丁版本。

【问题讨论】:

  • 所以你的脚本在直接调用时可以工作,但不是来自你的测试?您是如何从测试文件中加载文件的?
  • 是的,当直接调用时,一切正常,关于“要求”。一切都按原样加载。但是,我不明白你的第二个问题。我安装了一个名为“ruby-dbus”的gem,它的调用方式如下:require 'dbus'。它在任何 ruby​​ 脚本中都可以完美调用,但在 main.rb 中却没有。不管我需要什么 gem(默认库除外),它都会引发 LoadError。我使用 plasmoidviewer 实用程序测试我的代码,该实用程序在 main.rb 文件中有自己的表示。每个用 Ruby 编写的 plasmoid 都应该需要“plasma_applet”,这将是您代码的第一行。

标签: ruby kde-plasma plasmoid


【解决方案1】:
   require 'find'
   require 'findUtils'

    Find.find(PATH_WHERE_GEM_IS_INSTALLED) do |path|
      if FileTest.directory?(path)
            $: << File.expand_path(path)
       if File.basename(path)[0] == ?. and File.basename(path) != '.'
          Find.prune
        else
          next
        end
      else
      end
    end

然后你就可以做

require 'dbus'

【讨论】:

  • 我没有'findUtils'。 require 'find' 效果很好。我认为,应该有更清晰的方法来解决我的问题。 PATH_WHERE_GEM_IS_INSTALLED 就像蛮力一样,不是吗? :-)
【解决方案2】:

你试过了吗:

require 'rubygems'

?

【讨论】:

  • 是的,我有。顺便说一句,假设您是 Ruby 1.9 用户,自动意味着默认情况下已经包含 ruby​​gems(在 irb 会话中尝试 require 'rubygems',您会看到它将返回 false)。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多