在开发中出现了Rails: Sprockets::Rails::Helper::AssetNotPrecompiled错误

57
我对Rails比较新,正在尝试在开发环境中使用资产管道(SCSS)。但是,在我创建了控制器、视图和css.scss文件之后,我遇到了以下错误:Sprockets :: Rails :: Helper :: AssetNotPrecompiled。错误信息如下:资产未被声明为在生产环境中预编译。请添加Rails.application.config.assets.precompile +=%w(public.css)config/initializers/assets.rb并重新启动服务器。我读到在开发中,资产可以实时编译,不需要预编译。为什么会出现预编译错误?Rails是否认为我处于生产环境而不是开发环境? 我在2016年3月1日进行了编辑。我刚刚意识到将文件添加到config/initializers/assets.rb中可以解决问题。但这是正确的做法吗?我必须手动添加所有CSS / JS / JPG文件才能使其正常工作。我觉得这违反了DRY原则。
12个回答

147

对我都没有起作用(rails-5.0.7, sprockets-3.7.2, sprockets-rails-3.2.1):

config.assets.debug = false
config.assets.unknown_asset_fallback = true

但这确实发生了:

config.assets.check_precompiled_asset = false

3
字面上理解,config.assets.check_precompiled_asset 对我也起了作用。Rails 版本为 4.2.8。 - Alec.Zhou
12
非常感谢,这对我在Rails 6.0.2.1中也起作用了。 - yakattack
1
当Sprockets无法识别myfile.js.erb时,这在我的rails 6.0.3.3中有效。 - genkilabs
2
对我有用,但为什么?应用程序突然开始为图像抛出这些错误。将其放入development.rb中,它又可以正常工作了。 - Will
1
它能够工作。但这是否意味着它不会验证/检查预编译资产?这样做好吗? - Anas Ansari
显示剩余4条评论

54
我遇到了同样的问题,通过删除tmp文件夹中的所有缓存文件进行修复。
rm -rf tmp/cache/assets

2
这对我有用,谢谢!(Rails 5.2.2 / Sprockets 4.0.2 / Sprockets-Rails 3.2.2) - benj-p
2
谢谢!这是实际解决方案。rm -rf tmp/cache/assets/ - Weston Ganger
在 Rails 6.1 中对我有用。 - Matt

30
//= link_directory ../javascripts .js

将以下内容添加到 app/assets/config/manifest.js
适用于我(在Rails 6上工作)


2
我不得不添加这两行代码才能使其工作 //= link administrate/application.css //= link administrate/application.js,这是在 Rails 6 中使用的。 - alexventuraio
在我的Rails 6.1.3上运行良好。 - Sathish

19

对于那些从Rails 4升级到5-6的人,请查看manifest.js

app/assets/config/manifest.js

如果没有js的链接 - 就添加一个:

//= link_directory ../javascripts .js

9

在 Rails v5.1.5 中,更改 assets.debug 并没有起作用。我不得不使用这个选项:config.assets.unknown_asset_fallback = true


8
请查看文件。
config/environments/development.rb

config.assets.debug = true(如果为TRUE则更改为FALSE)

config.assets.debug 被设置为 True。 - Sydney
1
尝试将其更改为FALSE。 - aldrien.h
可以了,谢谢。所以调试模式不会预处理资源,这就是为什么我需要关闭它的原因?所以scss文件需要预处理才能工作? - Sydney
欢迎!是的,当需要在开发环境下进行调试时,这需要一些时间。但在生产模式下,它被设置为true,因为您需要预编译所有资产以实现更快的渲染和解释。 - aldrien.h
这对我没有用,我仍然收到错误信息,我已经将它从true更改为false。 - Steven Aguilar
是的,看看 Ameer 的答案。在 Rails 5.2.5 中对我起作用了。 https://dev59.com/lVsV5IYBdhLWcg3w4iFA#64203218 - Jamshad Ahmad

6

您可以使用以下代码行初始化此scss文件

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

3
需要更改的文件:config/initializers/assets.rb。 - Mayuresh Srivastava

3

bingoding是正确的!...那是宽慰的声音。 - nimmolo
这个解决了我的问题! - undefined

2

我需要在清单文件中声明我的资源:

//= link_directory ../stylesheets .css

app/assets/config/manifest.js


1

如果有需要的话,我在这里补充一些内容。

我有一个特定的JS文件,我只想在特定的ActiveAdmin页面中使用,它位于/app/assets/javascripts/admin/orders下。

最初,除了将以下内容添加到config/environments/development.rb中之外,没有任何解决方案适用于我:

config.assets.check_precompiled_asset = false

一位同事提到这个变化有点可疑,我也倾向于同意。这将对我们的开发产生什么影响?从现在开始,我们只会在暂存/生产环境中看到与资产预编译相关的错误吗?

由于我的/app/assets/javascripts文件夹下包含JS文件的子目录,因此我尝试进行更改。

//= link_directory ../javascripts .js

为了

//= link_tree ../javascripts

这对我解决了问题。 在development.rb文件中没有config.assets.check_precompiled_asset = false.


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