初めての Ruby および Rails アプリケーションで問題が発生しました。開発中に、最近このエラーに遭遇し、解決できませんでした: A copy of MetricBase has been removed from the module tree but is still active
. これは、ファイルまたは関連ファイルに変更を加えたときに発生します。サーバーを再起動することで解決しますが、かなり不便です。だから私は助けていただければ幸いです。レールの間違った使い方についても。
コンテキスト: データベースに分析したいデータがいくつかあります。このために、私は以下の構造を考えました。
- コントローラーがマネージャーを呼び出す
- マネージャーには、実際のオブジェクトを作成するための共通機能を持つ MetricBase からすべて拡張された、適切なメトリックのリストがあります。
- マネージャーは、各メトリック クラス (ResourceStats など) を呼び出します。
- Metric-Class (例: ResourceStats) は計算などを行い、親クラスのメソッドを呼び出します。
- 親クラス (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 を使用しています。
どんな助けやヒントも大歓迎です!
ありがとう、ルーカス