Gemfile 常量重新定义,"warning: already initialized constant"
Gemfile constants redefinition, "warning: already initialized constant"
在我的 Gemfile
中,我有两个 gem,它们都定义了同一组常量。这两个宝石是 sentiment_lib
和 engtagger
。
这意味着每当我 运行 一个任务时,我都会收到超过 10 个这样的警告:
...engtagger/porter.rb:6: warning: already initialized constant Stemmable::STEP_2_LIST
...stemmer/porter.rb:10: warning: previous definition of STEP_2_LIST was here
因为同一个文件只在两者中使用,所以这不是问题 - 但警告开始变得烦人。
我该怎么做才能解决这个问题?
我将从分叉开始 engtagger
然后删除具有已通过另一个 gem 启动的常量的文件,将您的更改提交到新创建的分支。
将其添加到您的 Gemfile
gem engtagger, github: 'your_github_handle/engtagger'
然后运行bundle update engtagger
现在您应该在没有该模块的情况下将 engtagger 添加到您的包中。
如果我们不处理常量,我会推荐一个模块 eval,但它很可能不起作用,因为常量一旦设置就无法更改,因此会出现警告消息。
在我的 Gemfile
中,我有两个 gem,它们都定义了同一组常量。这两个宝石是 sentiment_lib
和 engtagger
。
这意味着每当我 运行 一个任务时,我都会收到超过 10 个这样的警告:
...engtagger/porter.rb:6: warning: already initialized constant Stemmable::STEP_2_LIST
...stemmer/porter.rb:10: warning: previous definition of STEP_2_LIST was here
因为同一个文件只在两者中使用,所以这不是问题 - 但警告开始变得烦人。
我该怎么做才能解决这个问题?
我将从分叉开始 engtagger
然后删除具有已通过另一个 gem 启动的常量的文件,将您的更改提交到新创建的分支。
将其添加到您的 Gemfile
gem engtagger, github: 'your_github_handle/engtagger'
然后运行bundle update engtagger
现在您应该在没有该模块的情况下将 engtagger 添加到您的包中。
如果我们不处理常量,我会推荐一个模块 eval,但它很可能不起作用,因为常量一旦设置就无法更改,因此会出现警告消息。