huacnlee / rails-settings-cached

Global settings for your Rails application.
Other
1.06k stars 202 forks source link

config和rails-settings-cached共存的时候generator不工作 #172

Closed younthu closed 4 years ago

younthu commented 4 years ago

问题描述

  1. 在Gemfile里面加入两个包
    1. gem 'config'
    2. gem "rails-settings-cached", "~> 2.0"
  2. 运行rails g settings:install, 抛下面的错误.
Running via Spring preloader in process 60675
[WARNING] Could not load generator "generators/settings/install_generator". Error: Settings is not a module.
/Users/andrewy/.rvm/gems/ruby-2.6.3/gems/rails-settings-cached-2.1.1/lib/generators/settings/install_generator.rb:6:in `<main>'
/Users/andrewy/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
...
/Users/andrewy/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
-e:1:in `<main>'
Could not find generator 'settings:install'.
Run `rails generate --help` for more options.

问题分析

config下有一个Settings常量,两者冲突了。

解决方法

我的临时解决方案是修改config/intializers/config.rb前三行如下:

Config.setup do |config|
  # Name of the constant exposing loaded settings
  config.const_name = 'StaticSettings'  # 这地方原本是'Settings', 常量冲突

建议

除了重命名常量,我也没有想到更好的解决办法。 如果不值得为这个冲突去做任何修改,这也OK,希望能在readme.md里面提示一下有这个冲突存在。因为这个冲突还花了我一点时间去分析问题所在,希望后面的人不要踩进来。

huacnlee commented 4 years ago

额,不对,Gem 里面是没有 Setting 或 Settings 这样的常量的,应该是你生成的 Modal 命名成那样了。

哦,确实有,genderator 里面

app/models/setting.rb 如果和其他有冲突的话,可以换个名字,比如用 SiteConfig GlobalSetting AppConfig 之类的名字,这样就没问题了。

Gem 内部的都有 RailsSettings 命名空间的。

huacnlee commented 4 years ago

generator 这个问题或许我可以修复一下看看能不能彻底解决

pnghai commented 4 years ago

Maybe because of your module name https://github.com/huacnlee/rails-settings-cached/blob/7ae49b0f46a14d7b0a065f0719650c168d4b1505/lib/generators/settings/install_generator.rb#L6 Is the same with the Config gem's class name.

huacnlee commented 4 years ago

version 2.2.1 fixed