我正在使用 Rails 3.2.8 进行开发。一件烦人的事情是,如果错误地丢失了图像,则会在生产模式下出错。
假设我输入了以下代码。
实际上我忘记将 my.jpg 文件放在 app/assets/images 中,这在开发中没问题(浏览器只会忽略丢失的图像),但它在生产模式下会出现 rails 错误。
如何在部署前找到丢失的文件?
谢谢。
山姆
我正在使用 Rails 3.2.8 进行开发。一件烦人的事情是,如果错误地丢失了图像,则会在生产模式下出错。
假设我输入了以下代码。
实际上我忘记将 my.jpg 文件放在 app/assets/images 中,这在开发中没问题(浏览器只会忽略丢失的图像),但它在生产模式下会出现 rails 错误。
如何在部署前找到丢失的文件?
谢谢。
山姆
我在为部署构建新版本时所做的设置如下config/environments/test.rb
config.assets.compile = false
config.assets.digest = true
这模仿了production
资产管道的环境配置,防止资产被编译并强制通过manifest.yml
文件/资产管道进行查找。运行你的测试(你确实有测试,对吧?:-))并注意失败。
如果您没有测试,请用 greplog/development.log
查找 500 错误
tail -f log/development.log | grep 500
手动浏览几页并注意出现在尾部的新日志条目。不过,您应该考虑编写测试以使其自动化。
您在生产中看到错误的原因是资产管道找不到您请求的资产并因此引发异常。在开发中,事情更加宽松,以便可以向您提供调试信息以支持 500 错误。通过在您的环境中更改上述配置,您是在告诉 Rails 严格按照它对通过资产管道丢失资产的响应采取行动,从而使您能够在问题进入生产之前发现它。
您可以观看在开发模式下运行的 rails 控制台......它在找不到图像时会显示警告。
另外,使用浏览器的错误控制台。这两个都会告诉您缺少什么,然后您只需开始 grepping 或在视觉上搜索以查看您将图像放在哪里(或没有放在哪里)。
我不知道为什么生产服务器对损坏的代码不像您在开发中那样友好,除非您真的想推出缺少对象和引用的代码,否则会很烦人。