为何无法从.env文件读取变量?执行rake db:migrate时报错
问题原因及解决方法
出现NoMethodError: undefined method 'gsub' for nil:NilClass的核心原因是你的Rails应用没有成功加载.env文件中的环境变量,导致ENV['DATABASE_URL']返回nil,无法调用gsub方法。以下是具体排查和解决步骤:
确认已安装dotenv-rails gem
Rails默认不会自动加载.env文件,需要借助dotenv-rails工具。在项目的Gemfile中添加:gem 'dotenv-rails', groups: [:development, :test]执行
bundle install完成安装,之后重新执行rake db:migrate。检查.env文件位置
.env文件必须放在Rails项目的根目录下,不能放在app、config等子文件夹内,否则无法被正确识别加载。验证.env文件格式
确保.env文件中的变量定义没有语法错误:- 变量名和值之间不能有空格,比如正确格式是
DATABASE_URL=postgresql://...,不要写成DATABASE_URL = ... - 不要给值加引号(除非值本身包含空格等特殊字符)
- 变量名和值之间不能有空格,比如正确格式是
手动指定加载dotenv执行命令
如果安装gem后仍未生效,可以尝试在执行rake命令时显式加载dotenv:dotenv rake db:migrate
内容的提问来源于stack exchange,提问作者tongson
相关产品推荐
相关产品推荐

