2016-03-07 4 views
6

私たちはa gemを持っています。これはRakeタスクで実行されます。タスクはlib/tasks/<namespace>.rakeで定義されています。 Rake tasks inside gem not being foundを読んだあと、.gemspecにはタスクを定義するファイルが含まれていることが確認されました。 including rake tasks in gemsに示唆されているようにa railtie which should be including the tasksもあります。それでも、Rails 4.1アプリケーションはRakeタスクをロードしていないようです。なぜこの宝石はRailsアプリケーションにレーキタスクを追加しないのですか?

私には何が欠けていますか?

答えて

3

問題は宝石ではなく、アプリに含まれている方法で問題になっていました。 Gemfile

、これはrakeタスク動作し、含まれています

gem 'gem_fresh' 

これは動作しますが、がないがrakeタスクを含める:

group :development do 
    gem 'gem_fresh' 
end 

これはどのように起因すると思わBundlerはRailsアプリケーションに宝石が必要です。 From the documentation:デフォルトで

、Railsの生成されたアプリはRailsの環境へのあなたのGemfileでグループをリンクする、あなたのapplication.rbでBundler.require(:default, Rails.env)を呼び出します。

Rails.env引数は、私がrake -Tを呼び出すときにケースのように思わ:developmentグループを含むように評価されなかったことを何らかの理由で、宝石はBundler.require -dではないでしょう、とすくいタスクが「wouldn場合読み込まれます。

:developmentグループが含まれていないということは、奇妙なBundler "gotcha"だと思われますが、少なくとも今はデフォルトグループに移動することで問題が解決され、宝石には問題はありません。

3

私はちょうど正常に宝石をテストし、私はそれですくいタスクに問題を見ることはできません。

  • 私はGemfileにgem_freshを追加し、bundleを走った、宝石は、私が見ることができた直後
  • をインストール熊手のリストですくい存在:

    $ rake -T outdated 
    rake gem_fresh:outdated # outdated 
    
  • その後、私はを使用するrailtie.rbファイルを更新方法はlib/task/metrics.rakeで定義された熊手をロードし、再び使用可能に熊手を検索します

    # lib/gem_fresh/railtie.rb: 
    rake_tasks do 
        namespace :gem_fresh do 
        desc "outdated" 
        task :outdated => :environment do 
         GemFresh::Reporter.new.report 
        end 
        end 
    
        load "tasks/metrics.rake" 
    end 
    
    $ rake -T outdated 
    rake gem_fresh:outdated  # outdated 
    rake metrics:outdated_gems # display outdated gem version metrics 
    

だから、私はあなたの宝石に問題を見ることはできません。 railtie(インラインレーキとloadメソッドを使用する)の両方の方法は問題なく動作しているようです。私が気づいた唯一の違いは、これをレール4.2でテストしたことですが、違いが生じるのではないかと疑います。

Gemfileに宝石を入れましたか?私はそれをそこから取り除くと、実際にはgem_freshレーキが定義されていないとわかります。

+1

あなたは私を答えに導いた! – pjmorse

-1

OK

gem_freshは、問題の原因が発生している.gemspec に含まれているが、それはGemfile

のthatsから欠落しなければなりません。 あなたはそれを確認できますか?

関連する問題