0

本当に初心者の質問...

私のプロジェクトの多くのアプリには、gem に多くの共有コードがあります。いくつかのアプリの rake タスクで共有されるルーチンをその gem に追加しようとしています。

したがって、gem lib/utilities ディレクトリに cleanup.rb があります。

module Utilities
  class Cleanup

    def self.perform
      puts "Performing cleanup"
    end

  end
end

次に、アプリの lib/tasks に cleanup.rake があります。

require "utilities/cleanup"

namespace :mynamespace do
  task :do_cleanup => :environment do
    Utilities::Cleanup.perform
  end
end

rake mynamespace:do_cleanup から得られるのは、「初期化されていない定数 Utilities::Cleanup」だけです。

上記のいくつかのバリエーションを試しました。私の gem は bundler で管理していますが、「bundle exec rake ...」でも同じ結果になります。gem "utilities/cleanup"require の代わりに使ってみました。

(私は、この言語で何よりもモジュールとクラスの間で通信する方法を理解しようとして頭を悩ませていることを誓います!それは常に「ここでどのコードを参照しているのですか?」と「なぜそのクラスが見つからないのですか?」書きました?")

4

1 に答える 1

1

::Utilities::Cleanup.perform最上位の名前空間を明示的に使用するように記述する必要がある場合があります。

于 2012-11-05T08:01:06.370 に答える