模块构建失败:错误:spawn bin/rails ENOENT

Posted

技术标签:

【中文标题】模块构建失败:错误:spawn bin/rails ENOENT【英文标题】:Module build failed: Error: spawn bin/rails ENOENT 【发布时间】:2018-07-20 01:42:12 【问题描述】:

添加 ERB 加载程序并将 .erb 文件扩展名添加到我的 application 包(带有 webpacker)后,我收到以下错误:

ERROR in ./app/webpack/packs/application.js.erb
Module build failed: Error: spawn bin/rails ENOENT
    at _errnoException (util.js:1024:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
    at onErrorNT (internal/child_process.js:372:16)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
 @ multi (webpack)-dev-server/client?http://localhost:3035 ./app/webpack/packs/application.js.erb

样本hello_erb.js.erb 包也会发生这种情况。

这是一个重现问题的示例应用程序:https://github.com/jonhue/test_app

【问题讨论】:

如果您以最少的配置设置一个新的空白 Rails 项目,您是否有同样的问题? @Sharagoz 是的 ... 好的,你能提供一些关于你的平台的信息吗?像操作系统,NodeJS版本,Yarn版本,Ruby版本 @Sharagoz Yarn:1.3.2,Windows 10(最新更新),NodeJS:8.9.3,Ruby:2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32],Rails:5.1.5 ERB 运行器配置可能不适用于 Windows。尝试将 config\webpack\loaders\erb.js 中的运行器选项更改为 runner: "ruby bin\\rails runner" 【参考方案1】:

您可能缺少生成的文件

如果您缺少bin/rails 可执行文件,您可能是从遵循this issue 步骤的存储库克隆的 如果您正确安装了导轨然后运行,您的环境应该很好:

导轨

$ bundle exec rake rails:update:bin

导轨 >= 5

$ rails app:update:bin

您可能在安装 webpack 时遇到问题和/或配置

如果bin\ 上的这些文件存在,您可能遇到了问题when installing 和/或configuring webpack。 尝试创建一个项目,按照文档安装所有内容,使用 GitHub 等版本控制系统提交,复制/粘贴您的项目配置和git diff,我打赌您会发现它们之间的差异。

您使用的是 Windows 或某些有问题的环境

如果是这种情况,已经有讨论修复它in an open issue in webpacker github。但是您可以尝试直接从 github 使用 webpacker 来获取最新修复,降级到其他版本以查看结果是否不同,或者从源代码使用 webpack 并将文件 install.rake 更改为 install.rake 987654332@.

【讨论】:

嗯.. 我的bin 文件夹中有一个rails 可执行文件。 bundle exec rake rails:update:bin 但是失败了。我列出了所有可用于rake 的任务,而rails 不是其中之一。 似乎该命令仅适用于 rails 4。我运行 rails app:update 并强制 binstubs 更新。仍然得到同样的错误。小提示:webpack 抱怨了,我也不得不运行bundle binstubs bundler --force 你误解了我的意思:我仍然收到同样的错误 - 即使在更新了我的 binstub 之后...... 我确实使用以下步骤设置了一个示例应用程序:(1) rails new test_app --webpack (2) bundle exec rails webpacker:install:erb (3) bundle binstubs bundler --force (4) ./bin/webpack-dev-server -> 错误 你应该在bundle exec rails webpacker:install:erb之前运行bundle exec rails webpacker:install,你跳过了一步。【参考方案2】:

ERB 运行器配置包含一个必须更改才能在 Windows 上运行的设置。打开config\webpack\loaders\erb.js并替换这一行:

runner: "bin/rails runner"

用这一行:

runner: "ruby bin\\rails runner

【讨论】:

你知道我可以指定 runner 选项同时在 Windows 和 Linux 上工作的方法吗? @jonhue 据我所知,没有内置方式,但您可以使用初始化来动态生成文件或使用自定义运行器来调用真实运行器,具体取决于 Gem::Platform.local.os产量 解决方案相当明显。我为开发和生产创建了单独的 erb-loader 配置文件。

以上是关于模块构建失败:错误:spawn bin/rails ENOENT的主要内容,如果未能解决你的问题,请参考以下文章

启动失败 报:spawn cmd ENOENT 错误

启动失败 报:spawn cmd ENOENT 错误

将 iOS UIAutomation 作为操作后构建脚本运行会作为 posix spawn 错误返回

如何让 child_process.spawn 在我的 TypeScript 模块中返回一个 Promise?

模块构建失败:错误:检测到重复的插件/预设

Webpack(模块构建失败)