当引擎上的 运行 `rails generate` 时,如何修复 `undefined method `railtie_namespace' 错误

How can I fix `undefined method `railtie_namespace'` error when running `rails generate` on the engine

问题如下:

# 1) Create full engine `myengine` with Rails 4.2.10
rails _4.2.10_ plugin new myengine --full

# 2) Try to rails generate 
$ bin/rails g
/usr/local/lib/ruby/gems/2.6.0/gems/railties-4.2.10/lib/rails/engine/commands.rb:17:in `<top (required)>': 
  undefined method `railtie_namespace' for nil:NilClass (NoMethodError)

当您对引擎目录进行 symlink 并通过 link 到达该目录时出现问题,如下所示:

cd path/to/somewhere
rails _4.2.10_ plugin new myengine --full
ln -s path/to/somewhere/myengine ~/favorite/myengine

cd ~/favorite/myengine

./bin/rails g

如果你这样做,你会 运行 进入错误。要解决此问题,请更改 bin/rails 顶部的一些行,如下所示:

# from 
ENGINE_ROOT = File.expand_path('../..', __FILE__)
ENGINE_PATH = File.expand_path('../../lib/myengine/engine', __FILE__)

# to
require 'pathname'
ENGINE_ROOT = Pathname.new(__FILE__).realpath + '../..'
ENGINE_PATH = ENGINE_ROOT + 'lib/myengine/engine'

请参阅 ::Rails::Engine.find 的实施,了解补丁为何有效。