1

初めての Ruby および Rails アプリケーションで問題が発生しました。開発中に、最近このエラーに遭遇し、解決できませんでした: A copy of MetricBase has been removed from the module tree but is still active. これは、ファイルまたは関連ファイルに変更を加えたときに発生します。サーバーを再起動することで解決しますが、かなり不便です。だから私は助けていただければ幸いです。レールの間違った使い方についても。

コンテキスト: データベースに分析したいデータがいくつかあります。このために、私は以下の構造を考えました。

メトリクス システムの呼び出し構造

  1. コントローラーがマネージャーを呼び出す
  2. マネージャーには、実際のオブジェクトを作成するための共通機能を持つ MetricBase からすべて拡張された、適切なメトリックのリストがあります。
  3. マネージャーは、各メトリック クラス (ResourceStats など) を呼び出します。
  4. Metric-Class (例: ResourceStats) は計算などを行い、親クラスのメソッドを呼び出します。
  5. 親クラス (MetricBase) は Metric-Model を作成します

この時点で、次のように入力した直後にエラーが発生しますmake_metric_model

class MetricBase
  def initialize(id, resource)
    @id = id
    @resource = resource
    @metrics = []
  end

  def make_metric_model(name, desc, value)
    # here the error is thrown
    metric = Metric.where({ metric_id: @id, name: name }).first 

    metric = Metric.new if metric.nil?

    metric.metric_id = @id
    metric.name = name
    metric.description = desc
    metric.value = value
    metric.resource = @resource

    @metrics.push(metric)
  end

  def get_metrics
    return @metrics
  end
end

エラートレース

ArgumentError - A copy of MetricBase has been removed from the module tree but is still active!:
  activesupport (4.0.0) lib/active_support/dependencies.rb:445:in `load_missing_constant'
  activesupport (4.0.0) lib/active_support/dependencies.rb:183:in `const_missing'
  app/models/metric_base.rb:9:in `make_metric_model'
  app/models/resource_stats.rb:11:in `analyze'
  app/models/metrics_manager.rb:20:in `block in run_all_metrics'
  app/models/metrics_manager.rb:11:in `run_all_metrics'
  app/controllers/metrics_controller.rb:12:in `run'

::別の質問で提案されているように、以前に追加しようとしMetricましたが、同じことが起こります。私は C++、Java、および PHP のバックグラウンドを持っていることに注意してください。

Rails 4 と Ruby 2 を使用しています。

どんな助けやヒントも大歓迎です!

ありがとう、ルーカス

4

1 に答える 1

0

元の問題が何であったかはまだわかりません。回避策は、zeus を使用し、編集後にサーバーを強制終了して再起動することでした。

私が現在使用しているより良い解決策は、クラスを amodule Metricsに配置することであり、それは機能します。

于 2013-10-22T12:22:51.190 に答える