铁杆新手。只是试图理解\ 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
添加到application.js文件中,并将@import 'bootstrap'
添加到我的application.css中,现在它神奇地起作用!为什么!?我无法在任何地方找到这些文件
谢谢!
答案 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,你可能不想尝试;)