2011-09-02 62 views
8

我刚刚熟悉Rails 3.1,并且我花了一些时间更新旧项目,并试图弄清新资产流水线在开发模式和生产模式下的表现。在生产之前如何捕捉钢轨资产管道中的错误?

默认config.assets.precompile设置祝福仅application.css的application.js,意图使一切应该担任一个样式表和一个JavaScript文件。

显然,有情况时,我们不希望出现这种情况,所以我们可以将项目添加到该配置变量列表...

这是我遇到了我的沙盒项目将生产时的情况:

  1. 在开发中浏览网站,看到一切正常。资产被链接为单独的文件,并且该网站正确显示。
  2. 上传该网站到我的服务器,并试图让它在生产中工作。第一个错误是说“ie.css”(一个条件样式表)没有预编译。 (我在Safari中,这个样式表甚至不会被下载:在渲染页面之前,这个错误是由stylesheet_link_tag助手引发的。)
  3. Ran rake assets:precompile并重试。
  4. 将犯罪项目添加到config.assets.precompile并再次尝试。
  5. 将路径中的错误消除,直到遇到另一个资产错误。
  6. GOTO 3.

不知道如何解决这个问题,我几次去兜圈子,直到我以为我得到了所有的资产和网站在生产中进行渲染。然后我在MSIE中试了一下,并且遇到另一个错误500:“belated_png_fix.js”正在有条件加载,直到那时才出现。

所以我的问题是,除了试验和错误或严重依赖集成测试,我怎么能预测,当资产管道发现某些样式表或JavaScript没有添加时,我的网站不会弹出到预编译列表?

我也很好奇,为什么一个缺失的样式表资产应该导致整个页面出错500,而不是仅仅按需编译它,或者在请求资源时提供404。这是故意设计的“早期失败”吗?

+0

我最近将一个旧应用程序转换为资产管道,并没有任何问题。我花了一段时间才弄清楚一切如何一起工作。要回答你的问题,你能显示你的css和js文件的内容,特别是require语句吗?我也很感兴趣的是你如何从视图中调用这些。最后,他们都在应用程序/资产或您是否使用库/资产和供应商/资产? –

回答

1

我也有类似的问题与铁轨3.1。你可以做的最好的事情是安装capistrano多阶段,并获得一个临时服务器。

如果由于任何原因无法执行此操作,请在计算机上安装虚拟机并尝试复制服务器环境。

+0

是的,我已经这样做了,基本上。它属于“反复试验”的标题(当然可以通过一些集成测试来实现自动化......也许没有更好的方法。) –

0

这可能是矫枉过正,但这对我很有用(它给我干净,编译的资产)。我在.bash_profile文件中有这个。

alias ggo='bundle exec rake assets:clean && bundle exec rake assets:precompile && git add . && git commit -m "precompile" && git push origin master && cap deploy' 

和这在我的配置/环境/生产。RB(必要时军队生产编译;不应该是一个必要,如果我记得运行“GGO”在前):

config.assets.compile = true 

所以,我的工作流程是:1。 代码 2.混帐添加& git commit 3.如果我碰到CSS/SASS/JS/CoffeeScript文件,我运行ggo。否则,我做一个正常的帽子部署。

+0

有用的技巧,但问题是预编译仅对它知道的项目起作用关于。诀窍是弄清楚从各种视图链接的资源,并确保它们被添加到列表中。 –

1

持续部署是一件好事,你应该达到这么简单的地步,无论如何它确实没有那么痛苦。这就是说,config.assets.precompile可以采取正则表达式,所以你如何提出一个标准的顶级链轮“清单”文件,或标准的子文件夹的东西,不会被捆绑起来? (请注意,我还没有真正尝试过这个...)

2

我刚刚发布了一个名为assets_precompile_enforcer的宝石,它确保开发人员在开发时不会忘记将资产添加到config.assets.precompile。如果您通过javascript_include_tagstylesheet_link_tag包含资产,并且它与config.assets.precompile中的过滤器不匹配,则会引发异常。

这意味着资产错误将在开发过程中捕获,而不是在部署到生产后发现。