普通 Rails 安装上的 Webpacker 错误

Webpacker error on a vanilla Rails installation

在新的 Ubuntu 20.04 VM 上安装 Rails 的所有依赖项后,我在基础 Ruby-on-rails 教程中的第一步反复失败.

通过 scaffold 创建 vanilla 控制器并尝试访问它后我在服务器控制台中遇到的错误

[Webpacker] Compilation failed:
error Command "webpack" not found.

重现步骤

  1. 下载并激活 Ubuntu 20.04.2 Focal 的 VirtualBox 映像 来自 https://www.osboxes.org/ubuntu/

    的窝
  2. 安装Rails6.1.3.2、Ruby3.0.1和Node.js12以下 this guide 去信(使用rbenv)

  3. 创建新应用

    rails new testapp
    cd testapp
    rails generate scaffold Product name:string
    rails db:migrate
    rails server
    
  4. 转到 http://127.0.0.1:3000/ -- 按预期工作
    转到 http://127.0.0.1:3000/products —— 产生错误

我尝试过的东西 失败了(每一个都有一个新鲜的 Ubuntu 图片)

  1. bundle exec rails webpacker:install
  2. npm install webpack-dev-server -g
  3. yarn add webpack
  4. yarn install --check-files
  5. 在没有 rbenv 的情况下全局安装 Ruby
  6. 按照 Google 中的其他指南安装 Rails 结果是“rails 安装 ubuntu 20”
  7. 正在安装 Node.js 16 或 14
  8. 使用 Ubuntu 版本 21 或 18

一败涂地求助各位同胞


浏览器中出现详细错误

Webpacker::Manifest::MissingEntryError in Products#index

Showing /media/sf_coding/testapp/app/views/layouts/application.html.erb where line #10 raised:

Webpacker can't find application.js in /media/sf_coding/testapp/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:
{
}

Extracted source (around line #10):   

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>

此外,创建新的 rails 应用程序时可能会出现此警告

warning " > webpack-dev-server@3.11.2" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0"

只有在来宾 OS 上的共享文件夹中创建 Rails 应用程序时才会出现问题。

解决方案

  1. 在主机中启用符号链接 OS:
    VBoxManage setextradata "VMNAME" VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARENAME 1(更改 VMNAMESHARENAME
  2. 检查它是否在来宾的共享文件夹中工作 OS
    touch test
    ln -s test test-symlink 
    
    应该不会产生错误
  3. 重新创建您的 Rails 应用或通过捆绑器重新安装所有依赖项

详情
我想使用来宾 OS (Ubuntu) 作为服务器,而不是用 运行 Rails 所需的所有东西使我的主机 OS 混乱。 但我也想在主机上使用我最喜欢的文本编辑器编写代码 OS。

所以我在来宾 OS 的共享文件夹中创建了 Rails,这就是问题的来源。
我没有在最初的问题中提到共享文件夹的使用,因为我认为这不是什么实质性的事情。唉,真是太充实了。

我的猜测是没有创建 Webpack 工作所需的符号链接。
默认情况下,Virtualbox 中的符号链接是禁用的,作为针对恶意访客 OS 访问 运行 主机 OS.

的安全预防措施