为什么在 Rails 应用程序中要使用生产环境而不是开发环境

3

这两者之间有什么主要的区别吗?我还没有看到过解释主要区别的文档?性能方面是否有区别?

3个回答

9
即使两者表面上看起来相似,但“开发”和“生产”模式的运作方式存在显著差异。
在开发模式下,每次请求时都会重新加载app/config/routes.rb中的任何文件。这可能需要很长时间来处理,但具有基于代码库的任何更改生成最新响应的优点,这在开发环境中通常是持续进行的。由于生产环境应该在部署之间不会更改,因此Rails将缓存您的控制器、视图、路由、辅助程序和模型以实现最大性能。源代码的任何更改都需要应用程序重启。
开发的另一个特点是,Rails日志级别设置为debug,尽可能详细地记录每个SQL调用的详细信息,以及其他有用信息和警告消息。这种日志记录会对性能造成相当大的影响,除非您正在诊断问题,否则不应在生产环境中使用。这些日志文件会变得非常大,非常快速,并且很难在不重启Web服务器进程的情况下进行旋转。
在开发环境中还有一种方法可以从异常中恢复并将其呈现为易于理解的错误报告。这对于调试非常有用,但在生产环境中可能会暴露有关应用程序的敏感详细信息,因为它通常包括有关文件系统、关键参数等的大量信息。这在生产网站上永远不应启用。
这些差异可能并不明显,但您只需要比较config/environments/development.rbconfig/environments/production.rb中的配置设置即可。不幸的是,有些默认值并没有在这些文件中清晰表达,但基本设置通常都在那里。

完美!现在,如果我想在生产环境中打开调试模式,我还能将其设置为DEBUG吗? - user385948
1
您可以在 production.rb 中调整日志记录级别,但请注意在完成后将其关闭。它每小时增长多个 GB 并不罕见。 - tadman

5
在Rails的生产环境中,你的应用程序代码被缓存,因此解释器不必每次调用方法时重新加载类。你的应用程序基本上存储在内存中。这可以明显提高速度。
此外,默认情况下,它记录的日志要少得多;例如,生产日志不像开发日志那样包含每个单独的SQL调用。

2
缓存和错误处理。

使用缓存,是否会有显著的性能提升?假设我的页面不是静态的,而是非常动态的,这仍然有益吗? - user385948
1
所有应用程序代码都将在请求之间进行缓存,因此它们不必在每个请求上进行解析。这就是为什么您可以对文件进行更改并在开发环境中获得即时更改但在生产环境中却不能的原因。在两个环境中加载应用程序并比较相同请求的Web Brick输出,您将看到执行时间的差异。 - David Lyod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接