我在一个单独的项目中有一个外部css
,javascript
和Images
个文件,并希望包含在我的新rails
项目中。这是我的文件夹结构:
external-assets/js/ <Files>
external-assets/js/plugin/<Files>
external-assets/css/<Files>
external-assets/css/plugins/<Files>
external-assets/images/<some Folders>/<Files>
external-assets/images/<Files>
因此,我将external-assets/js
文件夹复制到app/assets/javascript
,而css
则将external-assets/css
复制到app/assets/stylesheets
。
并将<link rel="icon" href="external-assets/css/plugins/bootstrap.min.css">
替换为<%= stylesheet_link_tag "/plugins/bootstrap.min.css" %>
文件中的html.erb
。我对其他css
文件和js
文件采用了同样的方法。当我启动服务器时出现此错误:
Asset filtered out and will not be served: add `Rails.application.config.assets.precompile += %w( style.css )` to `config/initializers/assets.rb` and restart your server
在SO post
上搜索之后:Asset filtered out and will not be served: add `config.assets.precompile和
Asset filtered out and will not be served。我需要将所有js
和css
个文件提到config.assets.precompile
。
1)我真的需要提及所有js
,css
和images
文件吗?我知道原因,但我确实有很多资产文件。
2)如果我将它们放在public
文件夹中怎么办?这是好方法吗?
3)css为stylesheet_link_tag
,js为javascript_link_tag
。图像怎么样?
答案 0 :(得分:2)
我真的需要提及所有的js,css和图像文件吗?我知道原因,但我确实有很多资产文件。
没有
Sprockets具有require
指令,用于将您"require"的所有文件连接到application
文件中......
#app/assets/javascripts/application.js
//= require x
你想要什么?可能不是......但它至少让你能够调用一个文件(application
),同时受益于所有其他文件的内容。
2)如果我把它们放在公共文件夹中呢?这是好方法吗?
没有。
预编译资产无论如何都会将minified版本放入public/assets
。
3)css有stylesheet_link_tag,js有javascript_link_tag。图像怎么样?
<强>资产强>
我认为你对&#34;外部&#34;的作用感到困惑。资产。
如果资产真正外部(例如Google's JQuery repo),您可以使用javascript_include_tag
或stylesheet_link_tag
来引用它们分别为:
<%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js" %>
这基本上会在运行时将以下内容添加到您的布局中:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
如果这是您想要的,那么您最好将外部回购调用添加到#app/views/layouts/application
文件中(如上所述)。
-
Rails资产
然而 ....
他们显然不&#34;外部&#34;资产,如果你将它们存储在本地。
所以你要么必须从他们真正的外部存储库中调用它们,要么在你的应用程序中使用 local 。
如果您对在本地使用它们感到高兴(有责任让它们更新),您可以查看Rails Assets:
这是一个宝石存储库(您必须将source https://rails-assets.org
添加到您的Gemfil
),这允许捆绑程序将其服务器ping为基于资产的宝石。
这意味着像Bower一样工作 - 接受任何公共回购并将其转换为宝石。它允许您将外部存储库调用到您的应用程序中:
#Gemfile
gem "rails-assets-jquery.easing"
#app/assets/javascripts/application.js
//= require jquery.easing
这将基本上存储您希望在资产管道中使用的JS / CSS的本地版本,允许您将其包含在sprockets require
指令中。
最大的区别在于,由于这些资产是通过 gem 系统下载的,因此每次运行bundler
时都会更新这些资产。
我们使用它,虽然有时候它可能有点棘手,但它非常值得。
答案 1 :(得分:1)
将其全部放入公共目录,然后使用html <script>
,<link>
,≤img>
标记来引用资源。你将失去一些链轮功能,如缩小和消化,但这不是什么大问题。
提及application.css
/ application.js
中的所有资源,或创建新的清单文件,例如custom.css
/ custom.js
,列出要在此处使用的资产,然后将这两个文件添加到:
Rails.application.config.assets.precompile += %w( custom.css custom.js )
答案 2 :(得分:0)
你的application.js&amp;中是否有需要_ tree? application.css? 如果没有,只需将其添加到两个文件并重新启动服务器。
require_tree指令告诉Sprockets以递归方式将指定目录中的所有JavaScript文件包含到输出中。必须相对于清单文件指定这些路径。您还可以使用require_directory指令,该指令仅包含指定目录中的所有JavaScript文件,而不进行递归。
希望它有所帮助。 :)