通过安装在默认的Rails应用程序rails new具有config.assets.compile = false生产.
通常的做法是rake assets:precompile在部署应用程序之前运行,以确保编译所有资产管道资产.
那么如果我config.assets.compile = true投入生产会发生什么?
我precompile不再需要跑步了.我认为会发生的是第一次请求资产时,它将被编译.这将是第一次出现性能损失(这意味着您通常需要在生产中使用js运行时才能执行此操作).但除了这些缺点之外,在资产被懒散编译之后,我认为对该资产的所有后续访问都不会受到性能影响,应用程序的性能将与初始首次命中的懒惰编译之后的预编译资产完全相同.这是真的?
有什么我想念的吗?没有投入config.assets.compile = true生产的其他原因?如果我在生产中有一个JS运行时,并且愿意为首次访问资产而采取降级性能的权衡,作为不必运行的回报precompile,这是否有意义?
我正在使用资产管道(在Rails 3.1.3中)并且正在努力使其在生产中工作.
在我的/app/assets/stylesheets目录中,我有以下文件:
application.css --> this is the default rails one
stylesheet.css --> This is my custom stylesheet
Run Code Online (Sandbox Code Playgroud)
我花了很多时间将我的stylesheet.css包含在/public/assets/生产目录中(通过运行rake assets:precompile),我最终通过在我的application.rb文件中添加以下行来实现:
config.assets.precompile += ['stylesheet.css']
Run Code Online (Sandbox Code Playgroud)
我知道stylesheet.css在生产中有正确的预编译文件.
我遇到的问题是stylesheet_link_tag与我的stylesheet.css文件一起使用时.事实证明:
<%= stylesheet_link_tag "stylesheet" %><link href="/stylesheets/stylesheet.css" media="screen" rel="stylesheet" type="text/css"> 在生产中被解析我希望解决的路径/assets/stylesheet.css 就像在开发中一样.
更令人惊讶的是,application.css即使<%= stylesheet_link_tag "application"%>解决了这个问题,表现也很完美<link href="/stylesheets/stylesheet.css" media="screen" rel="stylesheet" type="text/css">.我不明白的是rails 3.1中不存在public/stylesheets /目录.
任何的想法 ?
production ×1