自从"升级"到Rails 3.1后,我的应用程序在开发模式下真的很慢
(每次请求> 30)
我有很多图像,似乎大部分时间延迟是处理每个图像的每个GET请求的资产管道.
在暂存或生产模式下没有此问题,因为资产已缓存等.
有没有我没有被告知的事情,或者这是我们现在应该如何工作?
我无法在邮件程序中使用任何形式的资产管道,而是使用Mailer本身或视图.
以下生成并清空src图像标记.
<%= image_tag "emails/header-general.png" %>
Run Code Online (Sandbox Code Playgroud)
空图像标记如下所示:
img alt ="Header-general"
以下通过模型附加文件并在视图中使用它的形式会附加一个空图像.
attachments.inline['header.jpg'] = 'emails/header-general.png'
...
<%= image_tag attachments['header.png'] %>
Run Code Online (Sandbox Code Playgroud)
我确实检查了路径,甚至尝试了多条路径等等但没有运气.请帮忙.在电子邮件中包含图像的任何形式都会有所帮助.
这是生产环境.
Xenium::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# Code is not reloaded between requests
config.cache_classes = true
# Full error reports are disabled and caching is turned on
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
# Compress JavaScripts …Run Code Online (Sandbox Code Playgroud) assets ruby-on-rails actionmailer ruby-on-rails-3.1 asset-pipeline
有谁知道资产摘要值究竟是如何计算的?如果我有两个包含各种其他包含的JS脚本的JS文件,那么如果没有更改内部脚本,那么每个文件是否会保持相同的摘要哈希?或者是每次资产:预编译操作运行时计算的新摘要值?
在Rails的指南对资产管道说,你可以使用YUI的压缩机与CSS:
config.assets.css_compressor = :yui
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到它实际上正在使用它的迹象.对于一个人来说,无论我是否安装了yui-compressor gem都没有区别.另一方面,无论我是否拥有该行,压缩输出都是相同的.
我actionpack-3.2.3/lib/sprockets/compressors.rb在registered_css_compressor方法中加入了一点调试行,这是编译css时的结果:#<Sass::Rails::CssCompressor:0x007fdef9f9fee0>
所以似乎配置行没有被尊重.有没有人真正使用过这个选项?
更新
查看sass-rails表示选择被覆盖:
if app.config.assets.compress
app.config.sass.style = :compressed
app.config.assets.css_compressor = CssCompressor.new
end
Run Code Online (Sandbox Code Playgroud)
如果我评论出来,那么它实际上会尝试启动yui压缩器...我仍在检查输出以查看它是否正确.
development.rb:
config.action_controller.asset_host = "assets.myserver.com"
Run Code Online (Sandbox Code Playgroud)
查看脚本:
<%= image_tag('header.jpg') %>
Run Code Online (Sandbox Code Playgroud)
收益率:
<img alt="Header" src="/header.jpg" />
Run Code Online (Sandbox Code Playgroud)
应该:
<img alt="Header" src="http://assets.myserver.com/header.jpg" />
Run Code Online (Sandbox Code Playgroud)
我正在使用rails-api我猜的宝石禁用一些资产和查看渲染的东西.
似乎不应该太难以重新实现(覆盖image_tag)来添加这个非常小的功能.想要这样做似乎有点奇怪.但是,我是新手,想知道如何做到这一点作为学习经验.
问题:
我知道CSS不应该有内容,但确实如此,就像从Twitter Bootstrap文档CSS中提取的这个好框(下面):

/* Echo out a label for the example */
.bs-docs-example:after {
content: "Example";
}
Run Code Online (Sandbox Code Playgroud)
我不关心"示例",我使用类似的东西作为mixin:
.box (@legend) {
/* Echo out a label for the example */
&:after {
content: @legend;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我不需要真正的动态CSS,我可以轻松地将mixin包含在一个类中,但不是传递"Observation"我需要传递t 'box.observation':
.observation {
.box("<%= t 'box.observation' =>");
}
Run Code Online (Sandbox Code Playgroud)
Rails应该遵循Conventions over Configuration,只需添加静态CSS/LESS/SCSS就很容易了,它已经包含在一个缩小的CSS中的所有页面中.国际化CSS的惯例是什么?例如,我应该把声明放在.observation哪里?
我正在尝试使用asset-pipeline插件(v1.0.4)在grails v2.3.1中设置SiteMesh布局,但我不确定如何处理在我的模板的特定位置包含javascript资源(如如果使用资源插件,你会使用r:layoutResources ).
示例布局(grails-app/views/layouts/test.gsp):
<html>
<head>
<title><g:layoutTitle/></title>
<g:layoutHead/>
</head>
<body>
<div class="thecontent">
<g:layoutBody/>
</div>
<asset:javascript src="application.js"/>
<!-- WANT DECORATED PAGE RESOURCES TO BE INCLUDED HERE -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
示例gsp(grails-app/views/test.gsp):
<html>
<head>
<meta name="layout" content="test"/>
<title>The Title</title>
<asset:stylesheet src="thispageonly.css"/>
</head>
<body>
<div id="helloworld">
Hello World
</div>
<asset:javascript src="thispageonly.js"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
生成的装饰页面(忽略资产管道捆绑/等)适用于样式表(因为它在头部)但是javascript失败:
<html>
<head>
<meta name="layout" content="test"/>
<title>The Title</title>
<link rel="stylesheet" href="/assets/thispageonly.css?compile=false"/>
</head>
<body>
<div class="thecontent">
<div id="helloworld">
Hello World
</div>
<!-- *** NOT WHERE I WANT THIS …Run Code Online (Sandbox Code Playgroud) 我是Rails的新手,现在还不太了解资产管道…
我想让
views/product/product.js
Run Code Online (Sandbox Code Playgroud)
之后自动射击
views/product/index.html.erb
Run Code Online (Sandbox Code Playgroud)
由于DRY原因而被渲染。
加载任何或部分model.erb文件后,资产管道中是否有一个地方调用model.js文件?
我知道如何手动操作,并删除了
app/assets/javascripts/product.js
Run Code Online (Sandbox Code Playgroud)
但是然后我必须在新的show中调用doSomethingAfterPageload()方法。删除等。甚至更好,如果这也适用于部分。
我开始知道,在生产模式中预编译资产时,app/assets如果我们不需要来自任何其他特定来源(如' vendor/assets'和' lib/assets')的文件,Rails将仅从默认情况下获取资产.
我有一个问题:
将require_tree.从'vendor/assets'和'lib/assets'加载资产?
我一直在寻找解决方案,但尚未找到好的策略。
我有一个使用Rails资产管道的巨型AngularJS 1.x应用程序,我的目标是使用UpgradeModule使用Webpacker从angular 1.x缓慢迁移到5.x。
我的问题是...如何使用链轮和资产管道获取旧的javascript文件,使其与Angular 5导入的新Webpack样式配合使用?
我可以将所有内容都放入Webpack,但这需要大量的重构。有没有人对此有任何经验并有好的解决方案?
asset-pipeline ×10
ruby ×2
sprockets ×2
actionmailer ×1
actionview ×1
angular ×1
angularjs ×1
assets ×1
css ×1
grails ×1
javascript ×1
overriding ×1
rails-api ×1
rake ×1
resources ×1
webpacker ×1