为什么 Rails 在启动时没有使用“ Expected to find a manifest file in‘ app/asset/config/Manife.js’(Sprockets: : Railtie: : ManifestNeededError)”?

bundle update之后,我的 Rails 应用程序无法启动:

Expected to find a manifest file in `app/assets/config/manifest.js` (Sprockets::Railtie::ManifestNeededError)
27132 次浏览

最近发布了一个新的主要版本的链轮,它与以前的版本不兼容。

在 Gemfile,要么执行 升级所需的步骤,要么别针到版本3. x

gem 'sprockets', '~>3.0'

发生什么事了?

看来你升级了链轮。后来的版本的链轮需要什么是所谓的 manifest.js文件。你没有。您需要创建一个,并添加一些“指令”。

我为什么要这么做?

在旧版本的链轮中,对于捆绑/连接什么资产做了很大的假设 * * ——顺便说一句,这就是链轮的作用。

“请给我链轮”

  • abc文件夹里的所有东西捆在一起
  • 捆绑并连接文件夹 xyz中的所有内容
  • 保持 admin.js独立。

解决问题的简单步骤:

  1. 创建 Manif.js 文件

    $ mkdir -p app/assets/config
    $ touch app/assets/config/manifest.js
    (not the root rails directory)
    
  2. 然后将下面的 复制粘贴添加到您刚才创建的 Manif.js 文件中:

    //= link_tree ../images
    //= link_directory ../javascripts .js
    //= link_directory ../stylesheets .css
    

“指令”是什么?

这些常见的东西 //=被称为“指令”。

如果你还没有这样做,请查看 链轮文档,省去一些麻烦。下面是一个小例子:

让我们翻译一下 //= link_directory ../javascripts .js指令:

抓取 javascript 目录中的每个 js文件,将它们连接起来,并将它们保存为 SEPARATE javascript 文件,即不进行捆绑如果需要捆绑,请使用不同的指令。

设置布局模板

您还应该有一个 javascript_include_tag,它通常放在 application.html.erb文件中。如果您有其他文件 js 文件是单独绑定的,不要忘记将它们添加到 application.html.erb,例如:

<%= javascript_include_tag "application", "addOtherFiles", "here", "etc", "data-turbo-track": "reload", defer: true %>
  1. 如果你有一个预编译数组在你的 app/config/environments/production.rb文件夹(见下面的一个例子) ,那么也许你应该把他们移动到你的 manifest.js,如果他们还没有访问上面。

    Precoding = [“ admin.js”,“ admin.css”]

想必您希望将 admin.js javascript 文件与 application.js文件分开。没问题,只要告诉链轮保持它们分开:

//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
//= link "admin.js"
  1. 最后,如果您正在使用 webpacker,您可能需要决定您希望通过资产管道处理哪些内容,以及您希望通过 webpacker 处理哪些内容。例如,根据您自己的特定用例,删除到 javascript 文件的 link _ 目录。

参考文献: read here 获取更多详细信息 re: Manif.js. file

来源: 感谢 Richard Schneeman 的博客-更多信息请点击这里。


脚注和入门书

  • 连接?通常情况下,JavaScript 有很多空白。为了加快速度,您可以转换您的 JS 代码,以便它没有空格,这样就可以快速上传-这就是连接。
  • 捆绑销售呢?不再像以前那么重要了,但是您可以将多个 JS 文件组合成一个文件,并将其发送到浏览器)。最新的更改是朝着正确方向迈出的一步: 现在您必须告诉 sprockets 显式地,您想要绑定和/或连接哪些文件: 这是在您的 Manif.js 文件中完成的,例如:

编辑: 如果事情令人困惑/不清楚: 大声抱怨!如果你保持沉默,我怎么能修复?每个人都从这些改进中受益。

正如链接 http://www.redmine.org/boards/2/topics/58169所建议的,这是一个已知的问题。参见 # 32223和 sprockets 4.0.0使用 Ruby < 2.5.0破坏 Redmine 3.4.11。

我刚用 Redmine 3.4.4复制了这个问题,但发现 Redmine 3.4.12没有问题。

我们得到 http://www.redmine.org/releases/redmine-3.4.12.tar.gz

根据 回答我,你可以用以下方法解决这个问题:

mkdir -p app/assets/config && echo '{}' > app/assets/config/manifest.js

如果您需要更多的细节,这个帖子里的答案有助于指向 从链轮3. x 升级到4. x 的指南