资产"application.js"在资产管道中不存在。

17

我是新手在RubyROR框架中。我尝试使用JQuery创建Web应用程序。我的步骤如下:

  1. 添加了gem 'jquery-rails'并从命令行执行了bundle install命令
  2. //= require jquery2字符串添加到application.js文件中
  3. 现在我试图将文件包含到页面中。我在application.html.erb文件中的
    中添加了字符串<%= javascript_include_tag "application" %>

当我尝试在浏览器中查看页面时,我看到错误消息:

Sprockets::Rails::Helper::AssetNotFound in LandingPage#index
The asset "application.js" is not present in the asset pipeline.
<%= javascript_include_tag "application" %>

我做错了什么?我在谷歌上搜索这个错误,但没有找到任何合适的解释。

5个回答

15

在Rails 6(使用webpack)的应用程序.html.erb文件中,我也遇到了这个错误,使用了语法javascript_include_tag。

在Rails 6和webpack中,请使用:

<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

我也在使用Rails 6,但仍然无法加载JavaScript。你的application.js文件在哪个目录中?我的文件路径是:app/javascript/packs/application.js - Riza Khan
我的application.js和你的在同一个目录下。 - Rudolf Fäder
你可能需要将从Rails5应用程序复制的application.js添加到与Rails5应用程序相同的位置。 - ruby_object
两个小时后,只有这个帮了忙。也许应该将其标记为解决方案?顺便说一句,谢谢。 - bolt
有时您可能需要同时使用资产管道和Webpacker。为此,您首先使用javascript_pack_tag,然后使用javascript_include_tag第二个(我指的是“application.js”)。不幸的是,webpacker无法处理咖啡脚本文件。我无法让webpacker内置的咖啡脚本功能正常工作,因此我同时使用了webpacker和资产管道,我的旧应用程序现在可以正常工作了。我尝试过从“https://l-plan.nl/articles/articles/coffeescript-and-webpacker”安装webpacker:install:coffee,但它会导致依赖项错误,并且无法推送到Heroku。 - Scott Milella

13
首先尝试重新启动服务器,通常不需要在资源中包含application.js文件。如果还是不行,那么请在你的config/initializer/assets.rb文件中添加以下内容:
Rails.application.config.assets.precompile += %w(application.js)

注意:在添加资产文件后,不要忘记重新启动服务器。如果您对初始化程序进行任何更改,请重新启动服务器以查看效果。


您好。感谢您的解释。我从头部删除了<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>,并在assets.rb中添加了Rails.application.config.assets.precompile += %w(application.js)。现在我发现jQuery无法加载到页面上。 - Alex
@Alex:您不需要从应用程序布局中删除<%= javascript_include_tag 'application','data-turbolinks-track': true %> - Gagan Gami
但是在这种情况下,我得到了相同的错误: 资产“application.js”不存在于资产管道中。 - Alex
你重启了服务器吗? - Gagan Gami
是的,这是我的错。服务器没有被重新启动。重新启动后一切正常。问题解决了!非常感谢你的帮助! :) - Alex
提醒大家一下,如果不运行rails assets:precompile RAILS_ENV=production,它在生产环境中是无法工作的。我已经添加了Rails.application.config.assets.precompile += %w(applicaion.js),但它仍然无法工作(只有在开发环境中才能正常工作)。 - Scott Milella

11

如果你在Heroku上部署的Rails应用程序遇到这个问题,可能需要指定文件名。

这是针对之前是Rails 6应用程序但在升级为Rails 7时,application.erb不再识别我的application.js文件的情况。

我进行了更改:

    <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>

变为:

    <%= javascript_include_tag "/assets/application.js", "data-turbo-track": "reload", defer: true %>

这解决了我的Heroku生产问题。


谢谢,伙计!这在我们的 Rail 7 项目中完美地运行了。 - Mostafa Ahangarha

5

上面的被接受的解决方案可以解决大多数问题,但如果像我一样在按照每个指示和解决方案后仍然遇到问题,请参考以下内容。

在经历了一系列错误后,我发现以下内容是有效的。

根据我的经验,这与webpacker和您的nvm安装有关。要尝试此解决方案,请首先撤消您执行的任何其他操作以调试问题。您需要确保正在运行最新的webpacker版本。

然后我会运行:

    rails webpacker:compile 

在你的终端中执行。

如果它编译时没有出现任何节点警告,那就没问题了。如果它给你一个关于你的节点版本的警告,或者它不能编译,安装最新的LTS节点版本。对于Ubuntu操作系统,我的版本是16.13.1。这很重要。最新版本的节点不一定是最新的LTS版本。你需要在你的主目录中安装。运行:

    nvm install --lts
    nvm use --lts

您可能想将此设置为默认值,例如:

    nvm alias default 16.13.1

同时确保你的应用程序布局包含:

    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

完成后,再次运行webpacker compile命令,如上所述。

如果您在此之后遇到任何问题,也可以尝试在您的配置/初始化程序/assets.rb文件中添加以下内容:

    Rails.application.config.assets.precompile += %w(application.js)

3
在我的情况下有效的是 rake assets:precompile,因为我们没有使用 webpacker。 - Eric Walker
1
由于没有使用 Webpacker,运行命令:rake assets:precompile,也帮助了我,谢谢 @EricWalker。 - Niranjanadas M
在开发过程中不要预编译你的资源文件——这绝对不是你应该做的事情。 - Jason FB

0
这可能对一些寻找这个问题的人有所帮助。 Rails版本:7.1.1
构建方式如下:rails new . --javascript=bun --css=tailwind --skip-test --skip-jbuilder --database=postgresql --asset-pipeline=propshaft 解决方案很简单。我只是进入了app/assets,发现没有javascript文件,于是我创建了一个空的application.js文件。
app
  assets
    javascript
      javascript.js


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接