为Rails 5中的每个控制器定义资源预编译

时间:2017-01-10 12:57:31

标签: ruby-on-rails asset-pipeline

我已熟悉Rails,但我下载了一个Rails演示应用程序,以查看一些最佳实践。

我的问题是资产管道仍然让我感到困惑。在我的其他Rails应用程序中,我为每个控制器都有一个JS和一个CSS文件,我可以在那里写任何我想要的东西并且它可以工作。

在我的演示应用程序中,我找到了这两行:

<!-- =============== VIEW VENDOR STYLES ===============-->
   <%= stylesheet_link_tag params[:controller] %>

<!-- =============== VIEW VENDOR SCRIPTS ===============-->
   <%= javascript_include_tag params[:controller] %>

当我启动我的应用程序时出现错误并解决此问题我必须添加这两行

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

对于我的initializers / assets.rb文件的每个控制器。

有点烦人。这是怎么回事?

1 个答案:

答案 0 :(得分:0)

取决于&#34; Demo App&#34;你已经下载了...无论如何 - 它可能是&#34; require_tree&#34;在application.js中删除或禁用。这样,您的Javascripts既不包含也不预编译。要恢复默认行为,您需要

//= require_tree .

出现在application.js的末尾。这同样适用于(s)css资产。只有那条线看起来像:

 *= require_tree .

位于application.css.scss

的热门评论栏末尾

请注意,在生产环境中使用这些行会将所有文件包含在内并编译成一个大文件,以后在应用程序的每个页面上使用,无论是否需要。有很多方法,但这是默认行为。因为&#34; Demo App&#34;你提到它(最有可能)被禁用,它可能有一些原因导致禁用require_tree行。