是否存在一种内置的方法来确定资产是否存在而不依赖于File.exists?(File.join(Rails.root, "foo", "bar", "baz"))资产路径.
我的应用程序从Resque队列上的远程服务器获取图像; 直到我们下载图像我想要提供占位符图像.目前我正在使用File.exists...但这意味着对路径进行硬编码,这会淹没或查看配置的资产路径.看起来这应该已经存在,但我在文档中找不到它.
我希望Rails 3.1能够获取更多我的资产以进行预编译.特别是,用于编译文件的默认匹配器不会添加.js文件vendor/assets/javascripts.我可以将资源添加到config.assets.precompile列表中,但这看起来很烦人.我不想在application.js清单中引用它们,因为我不希望它们包含在所有页面中.
总之,任何方式请求获取所有.js文件vendor/assets/javascripts得到预编译rake assets:precompile,但没有将它们包含在所有页面中?
我正在Rails中开始一个新项目,看起来application.js清单文件正在用我引用的javascripts做一些有趣的事情 - 它是否将这些文件缓存为资产管道的一部分?
这是发生了什么.我将名为jquery.autoresize.js的javascript文件添加到vendor/assets/javascripts文件夹,然后在application.js清单中引用该文件,如下所示:
//= require jquery.autoresize.js
Run Code Online (Sandbox Code Playgroud)
然后我启动了rails服务器.但在我的应用程序中导航后,我意识到我不小心添加了错误版本的jquery.autoresize.js文件.因此,我删除了该文件,然后将正确的版本添加到vendor/assets/javascripts文件夹中.但是,令我恐惧的是,当我重新加载页面时,它仍在加载旧的javascript文件.
我尝试清空浏览器缓存,然后退出并重新启动Rails服务器,但无济于事.我通过简单地重命名我的javascript文件并引用新名称一起破解了一个解决方案,这个工作正常.但必须有一个更好的解决方案.
新资产管道是否以某种方式缓存您引用的文件?如果是这样,我该如何清除缓存?谢谢你的帮助!
javascript caching ruby-on-rails ruby-on-rails-3.1 asset-pipeline
我在3.2.1,sass-rails-3.2.4和sass-3.1.15 ......
资产管道的文档说:
asset-url("rails.png", image) becomes url(/assets/rails.png)
image-url("rails.png") becomes url(/assets/rails.png)
Run Code Online (Sandbox Code Playgroud)
...
所以我做了以下文件:
# app/assets/stylesheets/public/omg.css.sass
body
background: asset-url('snake.gif', image)
#lol
background: image-url('snake.gif')
Run Code Online (Sandbox Code Playgroud)
当我访问localhost:3000/assets/public/omg.css时,我得到:
body {
background: asset-url("snake.gif", image); }
#lol {
background: image-url("snake.gif"); }
Run Code Online (Sandbox Code Playgroud)
...我也尝试将文件更改为omg.css.scss并将语法更改为:
# app/assets/stylesheets/public/omg.css.scss
body {
background: asset-url('snake.gif', image);
}
#lol {
background: image-url('snake.gif');
}
Run Code Online (Sandbox Code Playgroud)
但得到相同的结果......有没有人知道为什么这些助手不工作?
我正在为我的生产环境编译我的资产管道,它适用于我的所有环境.如何为我的开发环境重新编译资产管道?
我检查了我的配置/开发环境,但找不到修复程序.
在此先感谢任何帮助......
我想让Rails在编译的coffeescript/minified JS旁边生成源映射,以便更好地记录错误.但是,网上似乎没有关于如何执行此操作的全面文档.有没有人这样做过?
我在Rails 3.2和Heroku上.
由于我更新了几个宝石,所有测试都失败并出现错误:
ActionView :: Template :: Error:未声明资产在生产中预编译.
添加
Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )到config/initializers/assets.rb和重新启动服务器应用程序/视图/布局/ _faviconsheader.html.erb:14:在
_app_views_layouts__faviconsheader_html_erb__1320应用程序/视图/布局/ application.html.erb:21:在
_app_views_layouts_application_html_erb__4340
该错误似乎是指_faviconsheader.html.erb包含该行的部分:
<%= content_tag :link, nil, rel: :manifest, href: image_path("favicons/manifest.json.erb") %>
Run Code Online (Sandbox Code Playgroud)
这个部分载入application.html.erb:<%= render partial: 'layouts/faviconsheader' %>.
知道是什么导致了这个错误,该怎么办?在gem更新之前,所有测试都通过了.
我使用Rails 4.2.5.其中一个更新的宝石是sprockets(更新的链轮到版本3.5.2).我在github上读到有关链轮4出现问题的内容,但我没有使用版本4.
PS即使我添加Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )到config/initializers/assets.rb错误仍然存在.但即使这样可行,我也想了解为什么会出现这个问题,除了更新一些宝石之外没有任何变化.
我的应用程序在开发环境中运行时工作正常.在production(rails server -e production)中,浏览器无法访问css和js文件,并且在控制台上有以下消息:
I, [2013-07-27T21:00:59.105459 #11449] INFO -- : Started GET "/javascripts/application.js" for 99.102.22.124 at 2013-07-27 21:00:59 +0000
F, [2013-07-27T21:00:59.108302 #11449] FATAL -- :
ActionController::RoutingError (No route matches [GET] "/javascripts/application.js"):
Run Code Online (Sandbox Code Playgroud)
在生产环境中来自html源头部分:
<head>
<title>a Social Server</title>
<link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet">
<link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet">
<script data-turbolinks-track="true" src="/javascripts/application.js"></script>
<meta content="authenticity_token" name="csrf-param">
<meta content="jYM4IAXTXAuKWeD4FEVrXgXRNFeB6EazU68ZBQfRqNY=" name="csrf-token">
</head>
Run Code Online (Sandbox Code Playgroud)
另一方面,在开发环境中,头部看起来像:
<head>
<title>a Social Server</title>
<link data-turbolinks-track="true" href="/assets/application.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/twitter-bootstrap-static/bootstrap.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/twitter-bootstrap-static/fontawesome.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/bootstrap_and_overrides.css?body=1" media="all" …Run Code Online (Sandbox Code Playgroud) 我对Rails资产管道有些新意,所以我可能做错了什么.我正在尝试使用Active Admin作为我的后端和twitter bootstrap css用于我的前端应用程序.
我将bootstrap.css添加到/ app/assets/stylesheets然后还添加了:
//= require bootstrap
Run Code Online (Sandbox Code Playgroud)
到application.css - 然后我在本地进行了资产的预编译
它似乎工作正常,但一些样式并没有完全通过,我认为这是因为主动管理员的css覆盖它.
我的理解是应用程序将css资产编译到应用程序css公共资产中,应用程序在运行时使用该文件.
我需要以某种方式将两者分开并使其使用twitter bootstrap css作为前端的主要css,并且可能告诉它不要在前端使用活动管理员的css文件.
最好的方法是什么?
我正在开发一个Rails 3.2项目,最近几个月资产增加了不少,尽管我不认为这个项目很大.资产包括JS(没有咖啡脚本)和SASS文件; 我们有很多图像,但是从早期开始它们就已经存在了很多,所以我不认为它们是一个重要的因素.我们可能有大约十二个库,大多数是小的,最大的是Jquery UI JS.部署是通过Capistrano完成的,并且开始显示部署到分段的速度明显快于生产.为了说明同时避免不同服务器和网络效果的因素,我只需在笔记本电脑上按顺序运行以下三个命令,如下所示:
$ time RAILS_ENV=production bundle exec rake assets:precompile
^Crake aborted!
[Note I aborted this run as I felt it was getting stupidly long...]
real 52m33.656s
user 50m48.993s
sys 1m42.165s
$ time RAILS_ENV=staging bundle exec rake assets:precompile
real 0m41.685s
user 0m38.808s
sys 0m2.803s
$ time RAILS_ENV=development bundle exec rake assets:precompile
real 0m12.157s
user 0m10.567s
sys 0m1.531s
Run Code Online (Sandbox Code Playgroud)
所以我一直在挠头.为什么各种环境之间存在如此巨大的差异?我可以理解开发和分期之间的差距,但我们对分期和生产的配置是相同的.(我应该指出生产编译将在大约2小时后完成!)
虽然最终的结果是让我的预编译更快,但我想通过了解所有时间的进展以及为什么Rails环境之间存在如此大的差异来实现这一目标.我已经看过其他关于使用不同压缩器等的帖子,但我找不到任何有关如何调试这些rake任务的信息,以确定花费时间的地方并确定哪些设置可能导致如此显着的差异.
我不知道人们可能需要哪些其他信息,因此会在评论提出时更新.TIA
更新:下面提供的其他信息
config/environments/production.rb和config/environments/staging.rb(他们完全一样):
MyRailsApp::Application.configure do
# Code is not reloaded between requests
config.cache_classes = …Run Code Online (Sandbox Code Playgroud) debugging rake ruby-on-rails asset-pipeline ruby-on-rails-3.2
asset-pipeline ×10
javascript ×2
ruby ×2
sprockets ×2
caching ×1
css ×1
debugging ×1
heroku ×1
rake ×1
sass ×1