有config.assets.compile=true参数可以启用所谓的“实时编译”。我需要 Rails 在实时模式下针对每个请求编译一个特定的资产(sample.css.scss.erb),但其余资产仍应进行预编译。我怎样才能做到这一点?
问问题
362 次
2 回答
1
选项 1 - 放入sample.css.scss.erb
不同的路径config.assets.manifest (default="public/assets")
并添加它javascript_include_tag
选项 2 - 从 config.assets.precompile 中删除它
config.assets.precompile -= %w( sample.css.scss.erb )
确保你清理然后预编译来测试它。
我没有测试任何一个选项,请告诉我们是否对您有用。
于 2013-02-21T18:49:06.817 回答
-1
当 css 被 .css.erb 文件预处理时,需要对文件进行实时编译。这意味着动态编译css。
例如:允许用户设置颜色并希望有条件地使用“实时编译”
在这种情况下,我会建议动态渲染 /users/:id/styles.css.erb 而不是实时编译。
原因可能有数百万用户,并且在生产环境中使用 Ec2 实例会花费更多。这就是为什么我会建议以下解决方案:
首先在 上定义您的自定义操作UsersController
:
# config/routes.rb
match '/users/:id/styles' => 'users#styles', :as => :user_styles
链接到布局中的“样式表”:
# app/views/layouts/application.html.erb
= stylesheet_link_tag 'application', user_styles_path(current_user, :format => 'css')
在控制器中定义操作。您可以在此处执行任何您想要检索用户首选项的操作:
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def styles
@colors = User.find(params[:id]).colors
end
end
该操作将自动呈现此视图:
# app/views/users/styles.css.scss.erb
$background-color: <%= @colors[:background] %>;
body {
background-color: $background-color;
}
欢迎更多的想法和建议。
于 2017-02-25T12:50:23.927 回答