该滑轨资产管道指南将指导您使用config.assets.paths的config/application.rb,但我没有在这一点上访问请求的子域.
我希望能够根据请求的子域前置一个额外的路径(仅针对当前请求).
我的申请具体细节
这是一个基本的CMS应用程序.根domain.com主机使用标准控制器/视图呈现和默认资产路径处理管理部分.
请求以此subdomain.domain.com为基础呈现网站subdomain.它只调用prepend_view_patha before_filter并Rails.root.join('vendor/sites/[subdomain]/templates')为当前请求添加 .
我希望能够Rails.root.join('vendor/sites/[subdomain]/assets')在请求主机时添加到Sprockets搜索路径[subdomain].domain.com.
编辑
我最后只是在mixin中删除了Sprockets::Environment覆盖调用方法:
module SiteAssetsResolver
def call(env)
begin
# prepend path based on subdomain (from env)
super # Sprockets::Server#call
ensure
# remove path based on subdomain
end
end
end
MyApp::Application.assets.extend(SiteAssetsResolver)
Run Code Online (Sandbox Code Playgroud) assets ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline
我有两个问题.
我是否错误地假设我的所有javascripts都应该在rails 3.1中被压缩成application.js,即使在开发模式下也是如此?
如果没有,那么为什么我的标签包含我的所有30个javascripts并且需要加载?
我的application.js文件如下所示:
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
在浏览器中,它呈现为:
// This is a manifest file that'll be compiled into including all the files listed below.
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
// be included in the compiled file accessible from http://example.com/assets/application.js
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the …Run Code Online (Sandbox Code Playgroud) 我正在Heroku Cedar堆栈上运行rails 3.1 app,它支持资产管道.Heroku 列出了3种编译资产的方法
显然#3对性能有害,而Heroku文档也建议不要这样做.但我不确定#1和#2之间哪个更好.
#1要求您运行rake assets:precompile并public/assets在git中包含您的文件夹.你的slug会更大,但我认为部署网站的停机时间会更短.但更大的段塞大小意味着应用程序启动速度较慢,所以也许这是一个洗牌.
由于在Heroku端进行预编译,#2将使部署更新需要更长的时间.但是,你会有一个较小的slu and,而且管理/记忆的次数较少.
我的问题是 - 哪种选择(#1或#2)最适合生产,为什么?
到目前为止它看起来像选项#2但我想确保我不会忽视某些东西.
运行时:
rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
Run Code Online (Sandbox Code Playgroud)
一切都是预编译但不是我的 /app/assets/images/*
我甚至尝试将此添加到我的 environment/production.rb
config.assets.paths << "#{Rails.root}/app/assets/images"
Run Code Online (Sandbox Code Playgroud)
怎么了?谢谢!
在我们当前的rails应用程序中,我们遵循某些模式来包含脚本和样式表等资产.
例如,一个这样的模式是(布局内的代码):
= stylesheet_link_tag controller.controller_name
Run Code Online (Sandbox Code Playgroud)
这里的问题是并非所有控制器都有相关的样式表.检查资产是否存在的最佳方法是什么?具体来说,我知道由于缓存破坏资产名称,这里有一些技巧.
我刚刚为新的Rails 3.1应用程序进行了第一次部署,但资产似乎无法正常工作.我在部署时预编译了所有内容,它会public/assets像预期的那样出现.但是,例如stylesheet_link_tag "application"在我的布局中的输出有一个href指向/stylesheets/application.css.这显然不起作用.
奇怪的是,在开发模式下,一切似乎都很好,它/assets/application.css与预期相似.
我将我config/application.rb和config/environments/production.rb文件与我们在资产管道上的另一个应用程序进行了比较,相关设置似乎是相同的.
我应该在哪里看?
我无法将供应商资产编译为根文件.
我希望独立提供以下资源(不与其他资产一起打包):
vendor/gems/neo-viz/app/assets/stylesheets/neo-viz.css.scss
vendor/gems/neo-viz/app/assets/javascripts/neo-viz.js.coffee
vendor/gems/neo-viz/app/assets/javascripts/lib/jQuery/jquery-1.6.1.min.js
vendor/gems/neo-viz/app/assets/javascripts/lib/arbor/arbor.js
Run Code Online (Sandbox Code Playgroud)
使用以下行:
config.assets.precompile += %w( jquery-1.6.1.min.js arbor.js neo-viz.js neo-viz.css )
Run Code Online (Sandbox Code Playgroud)
只预编译css文件并使其可用.为什么?
此外,在看到这个问题(在Rails中包含带有config.assets.precompile的子目录中的资产)之后,我尝试了:
config.assets.precompile += %w( jquery-1.6.1.min.js arbor.js neo-viz.js neo-viz.css lib/arbor/arbor.js arbor/arbor.js lib/jQuery/jquery-1.6.1.min.js jQuery/jquery-1.6.1.min.js )
Run Code Online (Sandbox Code Playgroud)
但它没有任何区别.想法?
在这里坚果.我正在开发一个rails应用程序,我正在使用twitter-bootstrap-rails gem以便在我的应用程序中包含Twitter Bootstrap样式.这个gem在app/assets/stylesheets中生成一个名为'bootstrap_and_overrides.css.less'的文件,我一直用它来修改一些引导变量并包含我自己的CSS覆盖.
一切都很好,直到今天.出于某种原因,我今天对此文件所做的更改将保存到文件中,但Rails仍在提供该文件的旧版本!我搜索过,发现文件中没有任何预编译版本(公共/资产中没有)...只有我修改过的资产/样式表中的那个.对于应用程序中的目录,一切看起来都很好,但是当我启动rails服务器,加载页面,并使用元素检查器查看样式表时,它使用旧版本的'bootstrap_and_overrides.css.less'我已删除的规则.我已经在我的浏览器中关闭了缓存,并在4种不同的浏览器中尝试了它,所以我很确定这不是浏览器缓存的结果.
rails资产管道似乎只提供不存在的文件版本!有没有人知道为什么会发生这种情况?
web-applications ruby-on-rails browser-cache asset-pipeline twitter-bootstrap
我将使用Ruby on Rails 3.2启动一个富客户端Web应用程序.我打算使用RequireJS,但它似乎与Asset Pipeline发生冲突.据我所知,有什么后者基本上没有被串联相关资产,minifiying和压缩它们(纠正我,如果我错了),这似乎并不与装载JavaScript文件异步地非常兼容.
乍一看,资产管道似乎有更好的表现.但是,RequireJS允许您在模块中组织JavaScript代码,易于重用并管理其依赖项.
有没有办法将两者结合起来?如果没有,你会选择哪一个?
在尝试为chrome创建源地图后,我从heroku收到以下警告http://blog.vhyza.eu/blog/2013/09/22/debugging-rails-4-coffeescript-and-sass-source-files -in-google-chrome / 它们表示什么,如果有的话,我应该改变什么?
我的gemfile:
source 'https://rubygems.org'
ruby '2.0.0'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0'
# Use sqlite3 as the database for Active Record
#gem 'sqlite3'
gem 'pg'
gem 'devise'
gem 'font-awesome-rails'
gem 'bootstrap-sass', github: 'thomas-mcdonald/bootstrap-sass'
gem 'simple_form', git: 'https://github.com/plataformatec/simple_form.git'
gem 'carrierwave'
gem 'fog', '~> 1.3.1'
gem 'mini_magick'
gem 'rails_12factor'
gem 'friendly_id', '~> 5.0.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0'
gem 'bourbon'
group :development do
gem 'sass-rails-source-maps'
end
# Use …Run Code Online (Sandbox Code Playgroud) asset-pipeline ×10
assets ×2
heroku ×2
sprockets ×2
amd ×1
precompile ×1
requirejs ×1
ruby ×1
sass ×1
source-maps ×1