我正在寻找一种更好的方法来找出我遇到的ActiveRecord::StatementInvalid问题的根源

I'm looking for a better way to figure out the root of this ActiveRecord::StatementInvalid problem I'm having

提问人:WyattFantana 提问时间:9/30/2023 最后编辑:WyattFantana 更新时间:9/30/2023 访问量:37

问:

我对编码很陌生,所以请坦率地说我是个菜鸟。我有一个壁纸计算器,可以在 localhost:3000 的开发和生产环境中运行良好,但是当我部署站点时,计算器没有加载,我可以看到的唯一日志是,因为我没有在本地运行它,这是我从我托管我的应用程序的渲染日志中获得的:

Sep 29 10:56:54 PM  I, [2023-09-29T21:56:54.147139 #84]  INFO -- : [7596173b-1186-4b09-b9aa-135e556df481] Started GET "/wallpaper" for 172.71.151.43 at 2023-09-29 21:56:54 +0000
Sep 29 10:56:54 PM  I, [2023-09-29T21:56:54.148943 #84]  INFO -- : [7596173b-1186-4b09-b9aa-135e556df481] Processing by WallpaperCalcController#calculator as HTML
Sep 29 10:56:54 PM  I, [2023-09-29T21:56:54.156343 #84]  INFO -- : [7596173b-1186-4b09-b9aa-135e556df481] Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.7ms)
Sep 29 10:56:54 PM  F, [2023-09-29T21:56:54.157544 #84] FATAL -- : [7596173b-1186-4b09-b9aa-135e556df481]
Sep 29 10:56:54 PM  F, [2023-09-29T21:56:54.157874 #84] FATAL -- : [7596173b-1186-4b09-b9aa-135e556df481] ActiveRecord::StatementInvalid (Could not find table 'wallpaper_calcs'):
Sep 29 10:56:54 PM  F, [2023-09-29T21:56:54.158084 #84] FATAL -- : [7596173b-1186-4b09-b9aa-135e556df481]
Sep 29 10:56:54 PM  F, [2023-09-29T21:56:54.158323 #84] FATAL -- : [7596173b-1186-4b09-b9aa-135e556df481] app/controllers/wallpaper_calc_controller.rb:4:in `calculator'

数据库或路由似乎没有直接问题,wallpaper_calcs表存在并且可以在控制台中访问,迁移和架构都表明该表wallpaper_calcs存在。我可以在开发和生产环境中提交计算,并且数据库分别在 development.sqlite3 和 production.sqlite3 中更新,但是,错误“找不到表'wallpaper_calcs'”在实时网站上仍然存在,我应该提到网站的其余部分工作正常,错误仅在我尝试访问计算器所在的页面时出现。

  1. 确保运行迁移: 确保我已在生产数据库上运行迁移。

  2. 数据库配置: 检查了 config/database.yml 文件中的数据库配置,以确保生产环境连接到预期的数据库。

  3. 数据库连接: 确保部署的应用程序具有正确的数据库连接配置,并具有读取和写入数据库所需的权限。

  4. 已检查文件路径: 确保 production.sqlite3 文件的路径正确且文件可访问。

  5. 检查的文件权限: 确保 Rails 应用程序具有读取和写入 production.sqlite3 文件的权限。

  6. 已检查的 Migrations/schema.rb: 仔细检查迁移,以确保它们正确定义了“wallpaper_calcs”表。

  7. 已检查的模型定义: 已确保模型 WallpaperCalc 定义正确,并且模型文件中没有拼写错误或问题。

  8. 已检查控制器操作: 已检查错误日志中指出的WallpaperCalcController中的计算器操作。鉴于我在两个数据库文件中都获得了结果,它似乎正在尝试正确访问“wallpaper_calcs”表。

  9. 检查的依赖关系: 已检查是否安装了所有 gem 和依赖项。

  10. 更改了渲染中的“开始”命令设置: 从 到bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-production}

  11. 已检查生产.log中是否有错误消息: 查看生产.log以确定特定的错误消息和堆栈跟踪以查明问题,但根本没有错误,我唯一能够从中获得错误的日志是我从Render发布的日志。

在此过程中,我可能尝试了一些我现在无法想到的其他修复程序,但我不确定从这里开始何去何从。

Ruby-on-Rails 数据库 SQLite ActiveRecord

评论

1赞 smathy 9/30/2023
展示,不要说。
0赞 max 9/30/2023
你真的在生产中使用SQLite吗?另外,请注意 - 将覆盖文件中提供的任何设置,并在 Heroku 等平台上自动设置。ENV["DATABASE_URL"]database.yml
0赞 max 10/1/2023
此外,在这里进行健全性检查的最佳方法是只使用启动数据库适配器特定的数据库客户端。在 SQlite cli 中,您可以使用该命令列出数据库表。您还可以运行并检查您在开发中运行的迁移的最新版本。rails db.tablesselect * from schema_migrations;
0赞 WyattFantana 10/1/2023
是的,我是一个彻头彻尾的菜鸟,我承认我并不真正欣赏 SQLite 和 Postgres 之间的区别,但现在我明白了,并且理解为什么问题首先会发生,这是因为渲染无法在不使用磁盘的情况下使用 SQLite,正如你提到的,无论如何它都不是真正用于生产的。我通过完全删除数据库来解决这个问题,因为计算器不需要它,并且将来会更新以发布 gres,这是我编码的第一件事,整个项目是一个持续的学习体验!

答: 暂无答案