ruby-on-rails - 如何调试生产 Rails 应用程序?

标签 ruby-on-rails

我被指派在我们的(生产)订单管理应用程序的仪表板中查找错误。它显示错误的数据。由于我在本地没有该特定数据,而且无法很快获得,我将不得不在生产应用程序中完成。

我以前从未使用过或使用过实时运行的应用程序,对最佳实践、禁忌事项、安全预防措施等一无所知。

如果有人可以提供一些关于从哪里开始阅读(软件、工具、教程等)的线索,那将对我有很大帮助。出于某种原因,我只找到有关如何准备和部署 Rails 应用程序的信息。但不是关于如何实际管理正在运行的应用程序(已由其他人部署)。

一个例子:因为我需要将统计数据与真实数据进行比较,所以我想运行一个控制台(rails console --sandbox)并环顾四周,触发一些查询。我试过:

  • ssh 到运行应用程序的服务器
  • 切换到 Rails 应用程序文件夹 (www/project-name/current)
  • 运行 rails 控制台生产

但最后一条命令给了我:

The program 'rails' can be found in the following packages:
* ruby-railties-3.2
* ruby-railties-4.0

所以我想我不应该那样做。 那么我将如何调查这样的错误?直接查询数据库似乎很危险。

有什么建议吗?谢谢!

最佳答案

正如@ahmed-samir-shahin 所写,您需要使用 bundler 来获取当前的 ruby​​ 环境。当我必须调试项目中的生产错误时,我通常使用类似

的命令
RAILS_ENV=production bundle exec rails console

我倾向于使用 ENV var 而不是 rails console <env>符号。

正如您所指出的,错误发生在某些仪表板上。我假设您只是从那里的数据库中读取数据。如果是这样,我然后使用涉及的代码(很可能来自 Controller 操作的代码)来尝试调试行为。

通过在控制台中运行代码,您可以缩小范围,找出问题所在。这是我通常在涉及某种紧急情况时并且仅当您只是从数据库中读取数据时才会做的事情。

但是您应该尝试让某人在可以安全使用数据的暂存环境中提供数据。

找出问题发生的原因后,开始在本地计算机上设置测试用例并修复问题。 :)

备选

在 Rails 控制台中运行代码/查询。存储结果(复制和粘贴)并重新使用数据来创建一个测试用例,然后您可以在本地计算机上对其进行调试。

一般建议 - 向你的老板询问策略

一般来说,您应该与您的经理讨论如何处理此类情况。如何解决生产系统中的问题对团队中的每个人都很重要。我认为应该有人对这种紧急情况负责。当您迈出调试生产问题的第一步时,您公司中一些更有经验的人也应该帮助/协助您。

我认为在该领域对您进行培训符合公司的最大利益。恕我直言,贵公司必须提供一些工具,以便更容易地深入研究问题。否则这样的调试 session 将永远持续下去。不管怎样,不知道你们公司的结构是怎样的:)

关于ruby-on-rails - 如何调试生产 Rails 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43999215/

相关文章:

mysql - 如何使用 bundler 安装 mysql gem? (OS X Lion)

ruby-on-rails - 如何在 Ruby 中逐行将文本文件从网站导入数据库

ruby-on-rails - 载波临时目录设置为uploads/tmp文件夹

javascript - Backbone.js 未正确呈现 View

mysql - 将保存/更新调用 rails 转换为 sql

ruby-on-rails - 在 Rails 3 的模块内定义范围的最佳方式是什么?

ruby-on-rails - ActiveRecord(Rails)中是否有类似 create_view 的东西?

ruby-on-rails - NewRelic 认为我安装了 DelayedJob,但我没有

ruby-on-rails - 从 Rails 6 中删除 ActiveStorage 路由

ruby-on-rails - 子类化模型时的数据库和关系设计