如何从引擎内部 运行 "rails new.."

How to run "rails new.." from inside an engine

我有一个 rails 引擎公开了一个名为 myengine create 的命令。该命令生成一个完整的 Rails 应用程序,其中 myengine 已集成到其中。该命令调用 rails new ... 来生成应用程序。只要我在引擎文件夹 outside 执行此命令,一切都会正常。但是,如果我在引擎文件夹中执行它,它会中断,因为它 运行 是引擎中的 bin/rails 命令,而不是系统上安装的常规 rails 命令。引擎文件夹中的 bin/rails 配置为与引擎一起使用,因此它没有 rails new 命令。

我正在尝试编写自动化测试,运行 来自引擎内部的 myengine create 命令来验证输出。如果我在引擎目录中的任何地方,调用 rails new 会失败。

我试过指定确切的 rails 命令,例如 "/home/me/.rvm/gems/ruby-2.3.1/bin/rails new ...",但这不起作用。

我能想到的唯一解决方法是使用 Dir.chdir 或 Thor 的 inside 方法在引擎文件夹之外构建应用程序。我可以在那里对其进行测试,甚至可以将新生成的应用程序文件夹移回我的 spec/ 文件夹中。它有效,但感觉草率。必须有某种方法可以从引擎内部生成新的。

如果其他人 运行 对此感兴趣,我最终增强了我的命令以在尝试 运行 rails new 之前将 bin/rails 重命名为临时新名称。然后命令在 rails new 完成后将其重命名。