Rails项目切换PostgreSQL后控制台仍使用SQLite的问题排查
看起来你遇到了一个典型的「配置生效不一致」问题——服务器能正确连接PostgreSQL,但控制台还卡在SQLite上。我来帮你排查几个最可能的原因:
1. 先重启Rails控制台!
这是最容易被忽略的点:你修改了database.yml和Gemfile之后,之前打开的控制台进程还在加载旧的环境配置。直接关闭所有控制台窗口,重新用rails c启动,很多时候这个小操作就能解决问题。
2. 用bundle exec强制加载项目的依赖环境
如果重启没用,很可能是控制台没有使用项目的bundle环境,导致系统里的sqlite3 gem还在被加载。试试用以下命令启动控制台:
bundle exec rails c
启动后,在控制台里执行这条命令验证当前连接的数据库适配器:
ActiveRecord::Base.connection.adapter_name
如果输出是PostgreSQL,那问题就解决了;如果还是SQLite,继续往下看。
3. 检查是否有环境变量覆盖了数据库配置
Rails会优先读取DATABASE_URL环境变量的配置,哪怕你在database.yml里写了PostgreSQL的配置。在控制台里执行:
ENV['DATABASE_URL']
如果输出类似sqlite3:///path/to/your/project/db/development.sqlite3,说明这个环境变量在捣乱。你可以在终端里清除它(比如unset DATABASE_URL),或者在database.yml的default块里明确添加url: nil来覆盖环境变量。
4. 确认sqlite3 gem已经彻底移除
检查你的Gemfile.lock文件,搜索sqlite3,如果还能找到相关条目,说明bundle remove sqlite3没执行到位。重新运行:
bundle remove sqlite3 bundle install
然后再重启控制台试试。
5. 验证PostgreSQL数据库是否正确初始化
虽然服务器能运行,但还是要确认你的coin-devel数据库已经创建并执行了迁移:
rails db:create rails db:migrate
这一步能确保PostgreSQL里有users表,避免后续查询出错。
按照这个顺序排查,应该能快速定位问题——大部分情况都是控制台没重启或者bundle环境不对导致的。
内容的提问来源于stack exchange,提问作者crazettett

