美洲狮 config.rb 需要
Puma config.rb require
我的目录结构如下:
|-app
|-config
|---puma
|-----base.rb
|-----development.rb
|-----production.rb
为了保持 development.rb
& production.rb
干燥,我在每个文件的顶部添加了 require_relative 'base'
。 base.rb
包含两种环境通用的配置。
但是,foreman start
退出并出现此错误:
base.rb:1:in `<top (required)>': undefined method `workers' for main:Object (NoMethodError)
development.rb:1:in `require_relative'
更新
import
directive was added to the config file for Puma3.1.0.
解决方法
将require_relative 'base'
替换为eval(File.read(File.join(File.dirname(__FILE__), 'base.rb')))
。
说明
关于其内容load your config file, Puma does an instance_eval。因此,配置文件中的配置方法在 Puma::DSL
对象上被调用。
但是,“需要将文件加载到全局命名空间而不是
进入调用代码的范围”(require in instance_eval)。因此,使用 require_relative
会导致 base.rb
中的配置方法在 main:Object
而不是 Puma::DSL
对象,因此出现错误。
增强
也许 Puma 可以在他们的 DSL 中添加方法(可能称为 import
和 import_relative
),使这更容易和更清晰。
我的目录结构如下:
|-app
|-config
|---puma
|-----base.rb
|-----development.rb
|-----production.rb
为了保持 development.rb
& production.rb
干燥,我在每个文件的顶部添加了 require_relative 'base'
。 base.rb
包含两种环境通用的配置。
但是,foreman start
退出并出现此错误:
base.rb:1:in `<top (required)>': undefined method `workers' for main:Object (NoMethodError)
development.rb:1:in `require_relative'
更新
import
directive was added to the config file for Puma3.1.0.
解决方法
将require_relative 'base'
替换为eval(File.read(File.join(File.dirname(__FILE__), 'base.rb')))
。
说明
关于其内容load your config file, Puma does an instance_eval。因此,配置文件中的配置方法在 Puma::DSL
对象上被调用。
但是,“需要将文件加载到全局命名空间而不是
进入调用代码的范围”(require in instance_eval)。因此,使用 require_relative
会导致 base.rb
中的配置方法在 main:Object
而不是 Puma::DSL
对象,因此出现错误。
增强
也许 Puma 可以在他们的 DSL 中添加方法(可能称为 import
和 import_relative
),使这更容易和更清晰。