标签: asset-pipeline

仅对Rails 3.1中的图像使用asset_host proc

在以前版本的rails中,我能够使用proc仅为来自其他服务器的图像资源提供:

ActionController::Base.asset_host = Proc.new { |source|
  if source.starts_with?('/images')
   "https://s3.amazonaws.com/..."
  end
}
Run Code Online (Sandbox Code Playgroud)

由于新的资产管道,这在Rails 3.1中似乎不起作用.任何人都知道如何使这个工作?

ruby-on-rails ruby-on-rails-3.1 asset-pipeline

5
推荐指数
1
解决办法
1213
查看次数

如何在Rails 3.1中使用资产管道自动将scss编译成css?

新的rails 3.1资产管道让我很困惑.在rails 3.0.x中,使用sass gem时,我的全局css文件在编辑.scss文件时得到了更新.但是在rails 3.1中,这不再适用了.似乎每当我修改.scss文件时,我都必须运行rake任务来更新我的css文件.我觉得我误解了有关新资产管道的问题,但我不知道它是什么.有人可以为这个问题提供解决方案或解释吗?谢谢.

sass ruby-on-rails-3.1 asset-pipeline

5
推荐指数
1
解决办法
1万
查看次数

SCSS文件名

我在新资产管道以及SASS和SCSS上找到了大量资源.但是有一个问题让我感到困惑:命名CSS文件的正确方法是什么?是的.css.scss,还是不能和我一起去.scss

在我见过的几乎所有例子中,他们都有前者,所以必须有理由.我更喜欢后者,因为它使我的文件树在ol'眼球上更容易.

无论如何,仅仅因为有些东西并不意味着它是正确的,所以我想知道什么是正确的以及为什么.

ruby-on-rails sass asset-pipeline

5
推荐指数
1
解决办法
1104
查看次数

在Rails 3.1中以开发模式启用图像缓存

在Rails 3.1开发模式中(使用资产管道时),使用响应标头"Cache Control:must-revalidate"提供由资产/图像提供的图像.

这意味着Google Chrome(以及看似只有Chrome)会尝试多次重新获取图片 - 即使在单页视图中也是如此.这导致了通过JavaScript进行DOM操作的所有方式的棘手问题.仅举几例:

  • jQuery UI Draggable有时会与鼠标光标有明显的偏移
  • 添加或删除引用图像的CSS类将闪烁或调整大小,同时图像请求(将始终返回304未修改)正在进行中.
  • 附加或替换包含图像的HTML节点将触发更多图像提取,这将导致其下方的整个节点树闪烁,因为Chrome等待每个图像的304响应.

我完全可以理解,对于开发服务器来说,这是一个合理的事情.我甚至可以理解,即使在单页视图中,Chrome也拒绝缓存图像,这是非常合理的.

那么,有没有办法改变Rails应用于开发中的图像响应的缓存控制头?

更新:正如几个人所建议的那样,一个更有趣的问题是,当没有其他浏览器出现时,为什么Chrome会尝试在网页浏览中多次重新获取图片?(为什么这不会给其他开发者带来问题?)

更新x2:我不打算将此作为答案提交,因为它只是一个适合我的目的的解决方法,但我们能够通过预编译资产然后丢弃预编译的CSS和JS来解决这个问题.(这将要求sprockets调试变为false development.rb.)

rake assets:precompile
cd public/assets
find . -name "*.js*" -exec rm -rf {} \;
find . -name "*.css*" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

google-chrome cache-control ruby-on-rails-3 asset-pipeline

5
推荐指数
1
解决办法
2061
查看次数

使资产管道像开发中的生产一样

我遇到了生产资产的一些问题:缺少的,编译成错误文件的东西(javascript为"/ admin"编译成前端代码等等).大部分资产来自发动机.我想调试和优化它.

为此,我需要在开发环境中预编译,服务和失败,就像在生产环境中完成一样.

我已经为我添加了一些代码config/development.rb:

  config.serve_static_assets = true
  config.assets.precompile += %w( store/all.js store/all.css admin/all.js admin/all.css ) # @TODO: clean up, and optimize.
  config.assets.compile = false
Run Code Online (Sandbox Code Playgroud)

运行这个rake RAILS_GROUPS=assets RAILS_ENV=development assets:precompile给我所有的资产和manifest.ymlin public/.

但是服务器失败了:

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Spree/home#index

Showing /xxxx/app/views/spree/shared/_head.html.erb where line #13 raised:

favicon.ico isn't precompiled
Run Code Online (Sandbox Code Playgroud)

favicon.ico没有预编译.但它是!它位于公共目录中manifest.yml,我可以使用浏览器(或wget)获取它:http:// localhost:3000/assets/favicon.ico.

注意 Favicon只是第一个被称为资产的资产.如果我删除了favicon,问题只是表示下一个资产,即"all.js",或者当它被剥离时,"all.css",依此类推.我可以剥离它直到"footer_bg.png",然后它就会失败.同样:问题不是favicon,而是开发环境根本看不到预编译资产的事实.

还有什么需要让开发资产管道与生产类似?

编辑:更明确的解释,图标不是问题,只是一个症状.

ruby-on-rails-3 asset-pipeline

5
推荐指数
1
解决办法
3180
查看次数

heroku中的Asset_pipeline使用预编译的javascript的错误资产哈希

我正在尝试设置我的应用以通过Amazon S3/Cloudfront CDN提供资源.它是一个rails应用程序,我使用asset_syncgem来实现这个heroku文档.

我将我的项目推送到heroku,然后运行一个heroku run rake assets:precompile.这给了我看起来像这样的输出:

    I, [2013-09-20T21:19:06.506796 #2]  INFO -- : Writing /app/public/assets/application-cb6347d3ce9380e02c37364b541fd8ae.js
I, [2013-09-20T21:19:19.979570 #2]  INFO -- : Writing /app/public/assets/application-9dc3068c1bf9290c7eb0493fd36b3587.css
[WARNING] fog: followed redirect to abc123.s3-us-west-1.amazonaws.com, connecting to the matching region will be more performant
[WARNING] fog: followed redirect to abc123.s3-us-west-1.amazonaws.com, connecting to the matching region will be more performant
Run Code Online (Sandbox Code Playgroud)

请注意,它为JS文件写的哈希cb6347d3ce9380e02c37364b541fd8ae.js是正确的(因为我也在我的localhost下进行了暂存).

但问题是,当我在heroku上点击我的应用程序并检查源代码时,它所包含的JS与50460076f4c6eb614a44b6b17323efa7.js之前编译的JS 不同...

为什么heroku没有使用正确的预编译资产?我在本地部署并执行了所有相同的步骤,我的本地服务器没有问题就选择了正确的JS.

谢谢你的帮助!

heroku asset-pipeline amazon-cloudfront ruby-on-rails-4

5
推荐指数
1
解决办法
1237
查看次数

在模型中使用ActionView :: Helpers :: AssetUrlHelper和asset_path

我想创建一个MissingImage这样的类:

class MissingImage

  include ActionView::Helpers::AssetUrlHelper

  def src format
    return asset_path('layout/missing_image.png')
  end
end
Run Code Online (Sandbox Code Playgroud)

要在模型中使用这样的:

def main_image
  images.find(&:ismain) || images.first || MissingImage.new
end
Run Code Online (Sandbox Code Playgroud)

问题是 - asset_path当像这样使用时,只返回字符串而不与资产管道建立任何连接.

建议?

UPDATE

在搞砸之后我MissingImage有点重构,但它仍然没有在生产中生成签名的资产路径:

class MissingImage
  def src format
    return ActionController::Base.helpers.asset_path('layout/missing_image.png')
  end
end
Run Code Online (Sandbox Code Playgroud)

返回的路径是 /assets/layout/missing_image.png

ruby-on-rails asset-pipeline ruby-on-rails-4

5
推荐指数
1
解决办法
2859
查看次数

Rails 4:image_tag不适用于电子邮件中的图像

这是我的代码:

<p><%= image_tag "/assets/logos/#{@company_name.downcase}_logo.jpg" %></p>

发送电子邮件后,我在电子邮件客户端中查看电子邮件时,图像未显示.它看起来像一个破碎的图像

其他人遇到这个问题?

这是我的 development.rb

MyApp::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports …
Run Code Online (Sandbox Code Playgroud)

asset-pipeline ruby-on-rails-4

5
推荐指数
1
解决办法
2747
查看次数

如何链接到没有指纹的Rails资产?

在Rails中,我的资产中添加了指纹,例如

mysite.com/assets/something/base-216123123asdfasd20a.css
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我想从另一个网站(如博客)链接到这个,我不能依赖指纹.

是否有我可以设置的配置设置,以便我可以在不知道指纹的情况下访问文件?(虽然仍然保持指纹正常Rails使用;这只会用于特殊情况)

我不想做一次性的事情,比如为特定资产创建路线,因为我需要很多资产.

ruby-on-rails asset-pipeline

5
推荐指数
1
解决办法
1420
查看次数

在application.scss中包括来自node_modules的CSS

最新的Rails版本5.1.0.rc1默认包含bin / yarn。这使您可以直接安装npm模块。目前从application.js导入javascript文件似乎工作正常,但我无法从已安装的模块导入css文件。

我尝试过的方法是使用波浪号运算符让SASS知道它应该是一个模块:

@import "~owlcarousel-pre/owl-carousel/owl.carousel";
Run Code Online (Sandbox Code Playgroud)

关于如何使它工作的任何想法?

ruby-on-rails sass asset-pipeline yarnpkg

5
推荐指数
1
解决办法
1640
查看次数