标签: asset-pipeline

rails应用中的用户定义主题:如何存储资产

我正在构建一个应用程序,允许用户上传他们的主题以自定义方式显示数据.每个主题应包括所有必要的资源,如html模板(使用Liquid),css文件,javascripts和图像.结果应该与Shopify允许对客户做的非常相似.

我正在努力为用户找到提交主题的最佳方式,并为应用程序提供服务.具体来说,最佳做法是什么:

  • 为他们服务回访者.虽然使用自定义商店提供html/liquid文件似乎很容易,但我很困惑如何引用和服务1)主题所需的图像,2)主题所需的css文件,3)css所需的图像文件
  • 相应地存储不同的资产类型(例如,数据库与上传的文件和上传文件的文件夹结构)
  • 用户可以通过Web界面编辑上传的模板

提前致谢.

assets ruby-on-rails asset-pipeline

6
推荐指数
1
解决办法
497
查看次数

使资产管道与Chrome DevTools自动保存一起使用

Chrome DevTools自动保存不适用于Rails Asset Pipeline.问题的罪魁祸首是资产URL - 我无法通过其URL解密实际文件路径.例如,/ assets/application.css可以引用app/assets/stylesheets/application.css,lib/assets/stylesheets/application.css或vendor/assets/stylesheets/application.css.

我想知道,如何将资产URL更改为以下之一:

  • /app/assets/stylesheets/application.css(完全匹配实际文件路径,完美解决方案)
  • /assets/application.css?source_url=app/assets/stylesheets/application.css(介绍source_url查询参数)

我很感激为此编写Rails插件的任何帮助.


更新:向链轮填充了一个问题.

ruby-on-rails ruby-on-rails-plugins google-chrome-devtools asset-pipeline

6
推荐指数
1
解决办法
728
查看次数

Rails .js.erb文件中的完整资产URL

我有一个可以在任何网站上加载的书签.

它的工作原理如下;

  • 负载 http://my.example.com/assets/bookmarklet.js
  • 包括 http://my.example.com/assets/bookmarklet.css

css文件被添加到dom via中bookmarklet.js,因此需要知道它在哪里.

我的代码如下;

// assets/javascripts/bookmarklet.js.erb

var config = {
  stylesheetUrl: '<%= asset_path("bookmarklet.css", :only_path => false) %>'
}
Run Code Online (Sandbox Code Playgroud)

但无论我尝试什么,这都呈现为

var config = {
  stylesheetUrl: '/assets/bookmarklet.css'
}
Run Code Online (Sandbox Code Playgroud)

我需要asset_path返回一个完整的URL.但是asset_url不存在,我找不到一个选项asset_path,它将在当前域之前添加.

有解决方案吗

ruby-on-rails-3 sprockets asset-pipeline

6
推荐指数
1
解决办法
3658
查看次数

Rails资产管道 - 如何将资产包括在资产路径中?

好的,所以我已经转换了我的这个多皮肤的应用程序,以利用Rails 3.1中引入的资产管道.在大多数情况下,它非常简单,我喜欢预处理能力,它允许您在CSS/JS文件中使用内联Ruby.我遇到了一个主要问题,尽管Sprockets的强大功能似乎很难解决.我的应用程序可以在运行时选择任意数量的皮肤(或"身份")运行.这个"身份"参数设置了诸如缓存目录,数据库连接,视图路径之类的东西 - 实际上是资产路径.虽然所有"身份"都可以拥有自己的样式表,但还有一个共享的样式表可用于所有实例.所以assets文件夹结构看起来像这样:

在/app/assets/stylesheets/aplication.css.erb中:

<% require_asset("shared.css") %>
<% require_asset("overrides.css") %>
Run Code Online (Sandbox Code Playgroud)

这会加载两个样式表,关键是它使用配置的资产路径来解决它们(这就是我使用require_assets而不是标准requireinclude指令的原因,因为它们没有击中解析器).它返回找到的第一个匹配项,并允许我非常轻松地覆盖部分或全部默认样式.所以

/app/assets/stylesheets/shared.css
Run Code Online (Sandbox Code Playgroud)

可以通过在实例资源文件夹中放置具有相同名称的文件来覆盖

/app/assets/[identity]/stylesheets/shared.css
Run Code Online (Sandbox Code Playgroud)

如果没有这样的文件,它会默默地回退到默认的shared.css.

这一切都运行得非常出色 - 我对Javascripts,图像和字体使用相同的技术,并且在预编译期间一切都得到了整齐的处理和打包.但.有一种(横向)继承我无法实现; 有时身份的皮肤与另一个只有少数几条线条不同的皮肤(例如相同的布局但颜色方案不同)非常相似,我真的希望能够做到这样的事情:

资产/样式表/ application.css.erb:

<% require_asset("shared.css") %>
<% require_asset("overrides.css") %>
Run Code Online (Sandbox Code Playgroud)

资产/ current_identity /样式表/ overrides.css:

<% require_asset("../../some_other_identity/stylesheets/overrides.css") %>
/* followed by the dosen or so lines that differ for this skin */
...
Run Code Online (Sandbox Code Playgroud)

这个FAILS因为在当前上下文中"some_other_identity"不在资产路径中--Rails没有在开发模式下找到文件,当然它也不包括在预编译期间.如果我将它包含在资源路径中,则会加载错误的覆盖.css(只能有一个).所以我一直在尝试将这样的东西放在overrides.css的顶部:

<%= File.read(Rails.root.join("app/assets/some_other_identity/stylesheets/overrides.css")) %>
/* rest of CSS */
...
Run Code Online (Sandbox Code Playgroud)

事实上,这与预期一样有效.但.因为我现在正在使用资产管道来提供所有资产,所以我不能再使用固定路径引用CSS中的图像 - 我必须使用<%= asset_path("some_image.png") %>路径解析器才能发挥其魔力.这意味着我overrides.css的确是overrides.css.erb,当然,当您这样做时,ERB预处理不会发生 …

ruby-on-rails erb asset-pipeline

6
推荐指数
1
解决办法
1271
查看次数

如何让我的LESS变量可用于Rails中的所有CSS文件?

是)我有的:

在Rails 3.2.2中,我有以下样式表:

    app/assets/stylesheets
    |
    |-- application.css
    |-- bootstrap_and_overrides.css.less
    |
    |-- annotations.css.less
    |-- maps.css.less.erb
    `-- users.css.less.erb

前两个或多或少是系统默认的.其他是我定义自定义样式的地方.

所以,application.css像往常一样,包括所有其他文件:

*= require_self
*= require_tree .
Run Code Online (Sandbox Code Playgroud)

而且bootstrap_and_overrides.css.less,当然,包括Twitter的引导,以及一些其他的自定义的LESS变量.

@import "twitter/bootstrap/bootstrap";
@import "twitter/bootstrap/responsive";
// other stuff
@brown_text: #332820;
Run Code Online (Sandbox Code Playgroud)

什么行不通:

现在,annotations.css.less我想使用@brown_text,但它给了我:

variable @brown_text is undefined

我认为这是因为没有引用annotations.css.less定义变量的"主"文件.而且似乎annotations.css.less首先编译 - 请注意我目前处于开发环境中.

那么,我如何使用我的自定义LESS变量,并使其在其他样式表文件中可用?我目前的"修复"是将我的所有自定义样式移动到bootstrap_and_overrides.css.less.erb其中,这看起来根本不是很干净.

什么行不通:

仅仅import使用LESS文件是不可能的,因为它们使用Rails的资产路径助手.并且导入ERB文件也是不可能的,因为该@import语句将找不到该文件,因为它需要.less后缀.

less ruby-on-rails-3 asset-pipeline twitter-bootstrap

6
推荐指数
2
解决办法
4007
查看次数

将@ font-face文件集成到rails资产管道中

我正在尝试将设计者的html和css文件集成到rails应用程序中.他有大约四个@ font-face文件,这些文件当前链接到application.css文件中.我已将字体存储在assets/fonts文件夹中,并将该文件夹添加到资产管道中(在config/application.rb中)

我只使用了Google字体,我在application.html.erb文件中包含了google的链接.

我该如何包含这些字体文件?他们应该(1)保留在application.css文件中,还是(2)在app.html.erb文件中链接到javascript和styesheets?例如,像这样:

<%= asset_path('my_webfont.eot') %>
Run Code Online (Sandbox Code Playgroud)

css ruby-on-rails css3 font-face asset-pipeline

6
推荐指数
1
解决办法
3658
查看次数

机架错误(不是动态编译)在开发中提供资产

服务资产今天开始创建此错误:

!! Rack application returned nil body. Probably you wanted it to be an empty string?
!! Unexpected error while processing request: undefined method `each' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

我正在使用coffeescript和SCSS(application.js.coffee和application.css.scss)

来自Gemfile:

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'compass-rails'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'marionette-rails'
  gem 'uglifier', '>= 1.0.3'
end
Run Code Online (Sandbox Code Playgroud)

使用ruby 1.9.3-p392和1.9.3-p125会导致此问题.此错误的Google结果几乎不存在.

rack ruby-on-rails ruby-on-rails-3 asset-pipeline

6
推荐指数
1
解决办法
759
查看次数

Rails 4资产 - 生成两个不同的摘要

我显然必须在这里做错事.我正在与资产管道(再次)搏斗.我有一个自定义字体,在我看来,要正确编译我需要asset_path()在多个地方使用,但它有一个意想不到的效果.

我知道有几种方法可以做到这一点,但这就是我目前所拥有的:

application.css.scss.erb: @import "<%= asset_path("my-font.css") %>";

my-font.css的源文件是app/assets/stylesheets/my-font.css.erb(它需要是一个.erb因为我也在asset_path()那里使用).

application.rb我添加my-font.css到预编译列表. config.assets.precompile << 'my-font.css'

当我清理public/assets并运行rake assets:precompileEverything的编译时,使用摘要,但应用于实际文件的摘要与计算和输入的摘要不同application.css.

生成的文件 public/assets/my-font-2f25682a1ea904a866ef9f44101a5a2e.csspublic/assets/application-bba2edaee36771f4bdb5c89b8ec90aaf.css引用中是: @import url(/assets/my-font-ed843d3b174ca427edf963e473ad9e9b.css);

我意识到我可能asset_path()比我应该使用更多,并且还通过url()导入文件而不是要求它们,但这让我最接近让事情发挥作用.

我怀疑其中一个摘要是在my-font.css 上通过ERB 之前计算的,另一个是在之后,但我不明白为什么以及如何修复它.

建议?

ruby-on-rails asset-pipeline

6
推荐指数
1
解决办法
1135
查看次数

Rails资产路径在生产中缺少指纹

我们刚刚将Rails 4.0.3应用程序部署到生产环境中,并发现由指纹生成stylesheet_link_tagjavascript_link_tag丢失指纹的资产路径.因此application-c841bd1c82c25bb1de8452d2338479f7.js,页面只是请求,而不是请求类似的东西application.js.

RAILS_ENV=production bundle exec rake assets:precompile 成功并生成指纹文件.

config/environments/production.rb这似乎相关的位是:

# Compress JavaScripts and CSS
config.assets.compress = true

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

# Generate digests for assets URLs
config.assets.digest = true

# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
Run Code Online (Sandbox Code Playgroud)

这是在我们自己的Apache服务器上运行,而不是Heroku.我已经看了很多,发现了类似的问题,但这些问题的故障排除步骤都没有帮助.谢谢.

更多信息

如果它有用,这里是我们的配置文件的完整内容(删除了注释行):

application.rb

require File.expand_path('../boot', __FILE__)

require 'rails/all'

if defined?(Bundler)
  # If you …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails asset-pipeline

6
推荐指数
1
解决办法
2131
查看次数

无法解码下载的字体glyphicons-halflings-regular.woff2 - Rails,Production

我使用bootstrap3-wysihtml5,一些图标使用glyphicons字体.

我在我的rails应用程序中运行生产时使用glyphicons-halflings-regular字体时遇到问题.我的Chrome浏览器控制台正在显示

Failed to decode the downloaded font
Run Code Online (Sandbox Code Playgroud)

并且字体图标未显示.我看到图标应该显示的方框.即使在本地预编译并在本地作为生产运行,字体似乎也在本地工作.我在生产中运行资产预编译.

我的字体最初位于plugins下的vendor目录中,并附加了config.assets.paths的路径.

我已经确保CSS文件中的路径是正确的,因为我可以通过浏览器URL成功访问该文件.并且控制台警告显示"无法解码下载的字体"这一事实意味着它可以访问它.只是无法理解该文件.

我也尝试在rails mimetype配置中注册Mimetypes:

Mime::Type.register 'application/x-font-woff', :woff 
Mime::Type.register 'application/font-woff2', :woff2 
Mime::Type.register 'application/x-font-ttf', :ttf 
Mime::Type.register 'application/vnd.ms-fontobject', :eot
Run Code Online (Sandbox Code Playgroud)

我还尝试将字体放在公共文件夹中并相应地引用,从而将字体移出资产管道,但我遇到了同样的问题.

有没有人对我如何解决这个问题有任何想法?

使用:Rails 4.1.6 Ruby 2.2.2

ruby-on-rails font-face asset-pipeline

6
推荐指数
1
解决办法
1401
查看次数