Rails - 了解application.js和application.css

时间:2013-05-30 00:52:06

标签: ruby-on-rails ruby gem

铁杆新手。只是试图理解\ assests目录中的这两个文件。

例如,application.js文件包含如下行:

//= require jquery
//= require jquery_ujs
//= require_tree .

我理解require_tree .只是在当前目录中添加所有JS文件。通过上下文,我可以告诉require jquery添加了jQuery库。但它从哪里获得这些jQuery库?我没有在我的资产文件夹中看到任何jquery.js文件 - 或者在我的整个应用程序中直接看到这个问题?

同样,我正在按照一些说明安装twitter bootstrap(http://rubydoc.info/gems/bootstrap-sass-rails/2.3.2.0/frames)。将我的宝石添加到Gemfile之后,我需要将//= require bootstrap添加到a​​pplication.js文件中,并将@import 'bootstrap'添加到我的application.css中,现在它神奇地起作用!为什么!?我无法在任何地方找到这些文件

谢谢!

4 个答案:

答案 0 :(得分:10)

application.css和application.js不是常规的css和js文件(它们可能是,但它们有不同的用途

两者都是清单文件,它们告诉资产管道以及js的链轮

所以,正如Michael Durrant的答案所正确指出的,http://guides.rubyonrails.org/asset_pipeline.html#manifest-files-and-directives将是正确的地方

但是根据你的其他问题,你似乎错过了一个非常重要的难题

Rails主要用于宝石。 Gems是ruby代码的一部分,您可以通过bundler

添加到rails应用程序中

当您添加像引导宝石这样的宝石时,它会被安装(默认情况下安装在ruby中的宝石库中 - 类似于Ruby193 \ lib \ ruby​​ \ gems \ 1.9.1 \ gems)

如果你去那里寻找bootstrap gem,你会发现应用程序中包含的css和js文件,以及你在清单文件中包含的jquery和jquery_ujs

由于宝石与rails一起安装,因此rails不介意文件的位置(只要它知道它们在哪里)。

所以清单文件告诉rails“嘿,按照这个特定的顺序包含这些文件” 这就是为什么你可以包含你写的文件,这些文件位于assets文件夹中,文件包含在gem

如果您没有在清单中包含文件但仍然安装相当于编写css或js文件的gem,请将其放在某个文件夹中,而不是告诉rails它是否存在。当你告诉rails它在哪里时,通过清单文件,它会将它包含在资产编译过程中,你可以定期访问它。

另外,您不必将资产管道用于资产

您可以使用常规

包含css和js文件
 <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

只是托管你的文件并将其指向文件,但资产管道有许多优点,当你了解它时它真的会让你的生活更轻松

答案 1 :(得分:2)

要理解它,您必须查看Sprockets,它用于编译和提供网络资产。

您可以使用gem which找到这些文件。以下是bootstrap-sass的示例:

~ gem which bootstrap-sass
/Users/andr/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/bootstrap-sass-2.3.0.1/lib/bootstrap-sass.rb

@import 'bootstrap'的解释:https://github.com/thomas-mcdonald/bootstrap-sass#css并且有一条开放的issue带有评论。

答案 2 :(得分:0)

我认为它是从系统上安装的gem中获取的,并通过Gemfile包含在这个项目中。

您可以在http://guides.rubyonrails.org/asset_pipeline.html#manifest-files-and-directives

学习

答案 3 :(得分:0)

这是铁路魔术!因此,您无法在自己的项目目录中看到这些文件。如果你真的很好奇,你可以在gem的github页面上查看gem的代码https://github.com/twbs/bootstrap

此外,如果您真的想要更改gem中的内容,您可以将代码分叉到您自己的github中,更改本地分支上的内容,然后指定您自己的github作为源宝石文件中的宝石,如......

gem'twitter-bootstrap',:git =&gt; 'git@github.com:my_github / twitter_bootstrap.git'

但是,如果你真的不熟悉rails,你可能不想尝试;)