如何调试生产环境下的Rails应用程序?

4
我被指派在我们(生产环境中的)订单管理应用程序的仪表板中找到一个错误,它显示了错误的数据。由于我本地没有这个特定的数据,而且无法很快得到它,所以我将不得不在生产应用程序中执行此操作。
我以前没有与正在运行的应用程序一起工作过,也不了解最佳实践、不允许做什么、安全预防措施等方面的知识。如果有人能提供一些线索,告诉我从何处开始阅读(软件、工具、教程等),那将对我很有帮助。出于某种原因,我只找到关于如何准备和部署Rails应用程序的信息,但没有关于如何实际管理运行中的应用程序(由他人部署的应用程序)的信息。
例如:当我需要将统计数据与真实数据进行比较时,我想运行控制台(rails console --sandbox)并查看一下,发送一些查询。我尝试了:
- ssh连接到运行应用程序的服务器 - 进入Rails应用程序文件夹(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

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

有什么建议吗?谢谢!


1
当前文件夹的存在看起来像是Capistrano部署。你的想法应该是正确的(进入当前文件夹并打开控制台)。尝试使用 bin/rails c production - Ninigi
1
关于你的Rails控制台问题:你在生产环境中使用了rvm或其他Ruby切换器吗?如果是,你需要在运行控制台之前选择正确的Ruby(以便它可以找到bundler、rails和其他gems)。 - Sergio Tulentsev
@ninigi 谢谢,你说得对。这让我更进一步了解问题。现在的问题似乎是没有配置生产数据库:resolve_symbol_connection': 'production' database is not configured. Available: ["edge"] (ActiveRecord::AdapterNotSpecified) - Flip
1
@Flip 你要找的代码行可能长这样:set :stages, ["staging", "production"] - Ninigi
1
也许Rails没有系统范围内安装,这就是为什么你需要运行 bundle exec rails c production 的原因。 - Ahmed Samir Shahin
显示剩余7条评论
1个回答

5

如@ahmed-samir-shahin所述,您需要使用bundler获取当前的Ruby环境。当我需要调试我的项目中的生产错误时,通常会使用像下面这样的命令:

```bash bundle exec rails console production ```

这将打开Rails控制台,并使用生产环境中的Gemfile。

RAILS_ENV=production bundle exec rails console

我倾向于使用ENV变量而不是rails console <env>表示法。
由于您指出错误发生在某些仪表板上。我假设您只从数据库中读取数据。如果是这样,那么我会使用涉及的代码(很可能是控制器操作中的代码)来尝试调试行为。
通过在控制台中运行代码,您可以缩小问题发生的范围。这是我在有紧急情况并且仅在您只是从数据库中读取数据时才会采取的常规做法。
但是,您应该尝试让某人将数据提供在一个安全的分阶段环境中,以便可以安全地处理数据。
在弄清楚问题原因后,开始在本地机器上设置测试用例并修复问题。 :)
替代方案
在rails控制台中运行代码/查询。存储结果(复制并粘贴),并重复使用数据创建测试用例,然后可以在本地机器上对其进行调试。
一般建议-向老板寻求策略
通常,您应该与经理讨论如何处理这些情况。解决生产系统中的问题对每个团队成员都很重要。我认为有人应该负责此类紧急情况。此外,在您第一次调试生产问题时,公司中的一些更有经验的人应该提供帮助/协助。
我认为,对公司来说,在这个领域进行培训是最有益的。按照我的观点,您的公司必须提供一些工具以便轻松地解决问题。否则,这样的调试会花费大量时间。无论如何,不知道您的公司结构如何 :)

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