如何在rails 4项目中添加外部资产文件?

时间:2015-10-31 09:50:08

标签: css ruby-on-rails ruby ruby-on-rails-4

我在一个单独的项目中有一个外部cssjavascriptImages个文件,并希望包含在我的新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.precompileAsset filtered out and will not be served。我需要将所有jscss个文件提到config.assets.precompile

问题

1)我真的需要提及所有jscssimages文件吗?我知道原因,但我确实有很多资产文件。

2)如果我将它们放在public文件夹中怎么办?这是好方法吗?

3)css为stylesheet_link_tag,js为javascript_link_tag。图像怎么样?

3 个答案:

答案 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。图像怎么样?

image_tag

<强>资产

我认为你对&#34;外部&#34;的作用感到困惑。资产。

如果资产真正外部(例如Google's JQuery repo),您可以使用javascript_include_tagstylesheet_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

enter image description here

这是一个宝石存储库(您必须将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)

  1. 将其全部放入公共目录,然后使用html <script><link>≤img>标记来引用资源。你将失去一些链轮功能,如缩小和消化,但这不是什么大问题。

  2. 提及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文件,而不进行递归。

Check out this guide

希望它有所帮助。 :)