在Rails中在生产服务器上进行调试

5

如何在Rails的生产/测试服务器上有效地进行调试?

我尝试直接在服务器上修改文件并重新启动应用程序,但更改似乎没有生效或需要很长时间(缓存?)

我还尝试在本地运行“script/server production”,但速度非常慢。

另一个选择是编码和部署,但这非常低效。

有人有什么见解,可以高效地完成这项任务吗?

2个回答

7

即使我不赞同这种热补丁服务器代码的方式,但我会回答你的问题 :)

首先,请确认您是否真的重启了服务器?您可以通过跟踪日志文件来检查。

您更改的代码显示的视图可能已被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除文件,或者运行rake tmp:cache:clear命令来删除它们。无论如何,您都可以通过跟踪log/production.log文件来看到发生了什么(它将告诉您类似于“渲染缓存...”)。

另外一个要点:一些数据也存储在会话中。您也可以尝试删除您的会话(或者删除所有会话;例如,如果您将会话保存在数据库中,可以运行rake db:sessions:clear命令)。


很棒的技巧: 1)追踪日志文件(我也可以追踪Mongrel日志) 2)运行rake tmp:cache:clear命令(谢谢!)PS:我使用CODA直接编辑暂存服务器代码。=) - meow

2
为了在生产模式下运行本地服务器,请尝试以下操作:

RAILS_ENV=production script/server

或者

script/server --environment=production

问题在于,除非您在实际生产中也使用webrick/mongrel服务器,否则这样做将不能完全复制您实际的生产配置(可能使用Apache或Passenger?)。此外,环境中可能存在微妙的差异,这可能导致问题。
当您更改生产环境时,如何重新启动它?这取决于您的部署方式,可能只需在应用程序的/tmp目录下放置一个restart.txt文件,也可能像重新启动Apache或为您的应用程序提供服务的Mongrel进程一样困难(不是真的)。当您执行此操作时,更改需要很长时间才能出现似乎很奇怪。
当生产模式出现问题时,我只需检查production.log,通常会指向修复方向。然后我在开发环境中实施这个修复,然后重新部署。这通常就解决了问题。使用Capistrano只需要3个命令(提交、推送和部署),除非您的设置比我的复杂得多。

重新启动.txt是什么意思?我的设置也很简单,但问题在于有时我需要使用生产环境进行调试,这意味着我经常需要这样做。=) - meow
在 Passenger(用于 Rails 部署的 Apache 模块)下,您可以通过在应用程序的 /tmp 目录中创建一个 restart.txt 文件来重新启动应用程序。请查看此处的文档: http://www.modrails.com/documentation/Users%20guide.html#_redeploying_restarting_the_rack_application - Roadmaster

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