【问题标题】:How to debug a production Rails app?如何调试生产 Rails 应用程序?
【发布时间】:2017-05-17 15:29:26
【问题描述】:

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

我以前从未使用过或使用过实时运行的应用程序,并且不知道最佳实践、禁忌、安全预防措施等。

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

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

  • ssh 到运行应用程序的服务器
  • 切换到 rails app 文件夹 (www/project-name/current)
  • 运行rails console production

但是最后一条命令给了我:

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

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

有什么建议吗?谢了!

【问题讨论】:

  • 存在当前文件夹类型的事实看起来像是 Capistrano 部署。你的想法应该是正确的(cd-ing 到当前文件夹并打开一个控制台)。试试bin/rails c production
  • 是的,它是 Capistrano 部署
  • 关于您的 rails 控制台问题:您在 prod 中使用的是 rvm 还是其他 ruby​​ 切换器?如果是,则需要在运行控制台之前选择正确的 ruby​​(以便它可以找到 bundler、rails 和其他 gem)
  • @Flip 您要查找的代码行可能类似于:set :stages, ["staging", "production"]
  • 可能 Rails 没有安装在系统范围内,这就是为什么你需要运行 bundle exec rails c production

标签: ruby-on-rails


【解决方案1】:

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

的命令
RAILS_ENV=production bundle exec rails console

我倾向于使用ENV var 而不是rails console <env> 表示法。

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

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

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

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

替代方案

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

一般建议 - 向您的老板咨询策略

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

我认为在该领域培训您符合公司的最大利益。恕我直言,您的公司必须提供一些工具来轻松解决问题。否则,这样的调试会话将永远存在。无论如何不知道你的公司是如何组织的:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多