我正在努力寻找有关新Rails 3资产管道的任何真实文档.我知道有一个视频,但我不希望以这种格式观看一小时的视频.我看了大约10分钟,没有获得任何知识.
那么,我需要了解有关Rails 3资产管道的哪些信息?这对我之前的项目意味着什么,这对我未来的项目意味着什么?
我正在更新Rails 3应用程序以使用Rails 3.1,作为其中的一部分,我正在利用新的资产管道.到目前为止,我已经把一切都解决了一个我无法解决的相当恼人的问题.
应用程序及其所有资产在开发中运行良好,但在生产中,它使用Passenger(http://the-host/sub-uri/)部署到子URI .这个问题是资产是在部署期间预编译的,我的一个CSS(好吧,它是一个.css.scss文件)文件正在利用gem 中的image-url帮助程序sass-rails.由于在预编译过程中,路径被硬编码到预编译的CSS文件中,因此不考虑子uri:
在我的.css.scss档案中:
body { background-image: image-url("bg.png"); }
Run Code Online (Sandbox Code Playgroud)
编译application-<md5-hash-here>.css文件中的结果:
body { background-image: url(/assets/bg.png); }
Run Code Online (Sandbox Code Playgroud)
它应该是什么使它正常工作:
body { background-image: url(/sub-uri/assets/bg.png); }
Run Code Online (Sandbox Code Playgroud)
这个场景只是要求太多了吗?如果是这样,我将不得不切换回旧的非资产流水线方式,只需提供我的图像和CSS public.然而它似乎应该被考虑和解决的东西......?我错过了解决方案吗?
编辑1:我应该注意,使用erb解决方案会产生与预期相同的结果.
编辑2:回应Benoit Garret的评论
不,问题与此无关config.assets.prefix.我尝试设置(/sub-uri/assets而不是默认值/assets),但事实证明这是错误的做法 - 似乎这个设置已经与Rails应用程序的根目录有关,而不是服务器.删除它(从而恢复到默认值)已经修复了所有引起的奇怪问题(并且有很多,所有资产都进入了/sub-uri/sub-uri/assets- 这一切都非常奇怪).唯一的问题是image-url帮助者和朋友在预编译时不会获取子URI.毋庸置疑,这是合乎逻辑的,因为当它被预编译时,它不可能知道当它在Passenger下运行时,它将以这种方式配置.我的问题是如何告知它,从而最终得到预编译结果中的正确路径.如果确实可以做到的话.
我目前的解决方法是像这样引用CSS中的iamge:url(../images/bg.png)并将其放在非流水线public/images位置.很难理想,因为它不会受益于指纹和管道提供的一切.
当我thin像这样加载:
thin start -e production
Run Code Online (Sandbox Code Playgroud)
并尝试访问我的一个页面,我在日志输出中得到这个:
cache: [GET /] miss
cache: [GET /assets/main-bd1ef4b153740fb69fd615304b87ad0d.css] miss
cache: [GET /assets/jqModal-8fa734bf4f58524b2799abd73ab7d34f.css] miss
cache: [GET /assets/jquery-544665ba1d5b4f793290421aafed85c9.js] miss
cache: [GET /assets/application-00b97aa2429046c0c43802f07b756b46.js] miss
Run Code Online (Sandbox Code Playgroud)
这些文件存在于我的assets目录下public.
我也运行这个命令:
RALS_ENV=production rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
我试过/public/assets/application.js在浏览器中访问该文件,如下所示:
http://localhost:3000/application.js
Run Code Online (Sandbox Code Playgroud)
这给了我一个404错误(即使该文件存在/public/assets但是当我在服务器处于开发模式时向文件发出请求时可以读取该文件.
有人有主意吗?
我在lib/assets文件夹中有这些文件(sketchyPad是用于在html5画布上绘制的jQuery插件,而farbastic是sketchyPad使用的颜色选择器):
lib/
|-- assets
| |-- javascripts
| | `-- lib.js
| `-- sketchyPad
| |-- README.md
| |-- brushes
| | |-- simple.js
| | `-- smooth.js
| |-- example
| | |-- index.html
| | |-- jquery-ui-1.8.16.custom
| | | |-- css
| | | | `-- ui-lightness
| | | | |-- images
| | | | | |-- ui-bg_diagonals-thick_18_b81900_40x40.png
| | | | | |-- ui-bg_diagonals-thick_20_666666_40x40.png
| | | | | |-- ui-bg_flat_10_000000_40x100.png
| | | …Run Code Online (Sandbox Code Playgroud) 我有一个非常奇怪的问题,我的资产在开发中的速度非常慢(每个文件10秒),而这只发生在Chrome(17.0.963.79)中.在Firefox中一切正常.我的设置:
webrick到mongrel和thin使用rails-dev-tweaks gem将缓存类设置为true和false.这一切都没有帮助,我坚持为什么它的工作只在chrome中运行缓慢而不在Firefox中?这也是操作系统的新设置,也许我错过了一些东西,谢谢!UPD.如果这个初始请求(例如来自新标签)都顺利进行.如果我正在刷新页面请求接近2分钟.我只是无法绕过这个问题:(
我可能只是做错了什么,但我的所有javascript文件以及我的css文件都是单独可用的.这将是完美的,除了资产管道还添加我的applicaion.js,这使我的javascript崩溃.有没有办法告诉rails不要加载所有单个文件,我只需要app.js/css文件.

正如您在此处所看到的,搜索和排序栏显示两次,因为javascript尝试运行两次.其他人处理这件事吗?我看到其他几个人问这个问题,还没有看到一个好的答案.
我目前正致力于将Dart集成到Rails Asset Pipeline中.
编译工作已经开始; .dart文件.js由Asset Pipeline 编译.但是,还应该有一个.dart可以由Dartium解释的未编译版本.
通常的方式是.dart文件包含在html源代码中,其类型为"application/dart".然后是dart.js,如果浏览器不理解Dart,则用.dart相应的.js版本替换这些文件.foo.dartfoo.dart.js
我的问题是,资产管道服务于已编译的JavaScript版本,即使客户端请求也是如此foo.dart.foo.dart应该服务于原始的,未编译的版本,只foo.dart.js应编译.
编辑:我想过只是将原始.dart文件复制到公共文件夹,但这不是一个选项,因为Asset Pipeline看到的源文件可能包含其他.dart文件,然后将这些文件编译成一个.js文件.因此,并非所有.dart文件都会被复制.
我试图通过包含ActiveView :: Helpers在我的模型序列化器输出中包含一个图像资源管道URL:
class PostSerializer < ActiveModel::Serializer
include ActiveView::Helpers
attributes :post_image
def post_image
image_path "posts/#{object.id}"
end
end
Run Code Online (Sandbox Code Playgroud)
结果是/images/posts/{id}而不是资产管道路径的有效路径,即./assets/images/posts/{id}.如何在序列化程序输出中包含有效的资产管道路径?
ruby-on-rails asset-pipeline active-model-serializers ruby-on-rails-4
我正在尝试使用rails-assets-angulargem 将AngularJS引导到Rails引擎中.
但是,当我在父应用程序(我的引擎安装的应用程序)上启动服务器时,我收到此错误:couldn't find file 'angular'.
这是我的application.js:
//= require angular
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
这是我的.gemspec:
$:.push File.expand_path("../lib", __FILE__)
# Maintain your gem's version:
require "lesson_notes/version"
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
s.name = "lesson_notes"
s.version = LessonNotes::VERSION
s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
s.add_dependency "rails", "~> 4.0.4"
s.add_dependency "rails-assets-angular"
s.add_development_dependency "pg"
s.add_development_dependency "rspec", "~> 2.14.1"
s.add_development_dependency "rspec-rails"
s.add_development_dependency "capybara", "~> 2.2.1"
s.add_development_dependency "factory_girl_rails", "~> 4.0"
s.add_development_dependency "rails-assets-angular-mocks"
s.add_development_dependency …Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 4.2进行一个非常简单的项目.当我运行rake assets:precompile(用于开发和生产环境)我得到一个application-xyz.js与application-xyz.css文件中的公共/资产.但是不会创建gzip版本,即no application-xyz.js.gz和no application-xyz.css.gz.我不知道有任何禁用此功能的选项.我错过了什么吗?
asset-pipeline ×10
angularjs ×1
assets ×1
dart ×1
javascript ×1
passenger ×1
performance ×1
ruby ×1
sprockets ×1
thin ×1