我在使用Docker处理Rails 6 应用程序时遇到了这个问题。
问题是我将数据库连接字符串修改为config/database.yml
文件中的环境变量:
default: &default
adapter: postgresql
encoding: unicode
database: <%= ENV['DATABASE_NAME'] %>
username: <%= ENV['DATABASE_USER'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
host: <%= ENV['DATABASE_HOST'] %>
port: <%= ENV['DATABASE_PORT'] %>
在我的docker-compose.yml
文件中使用它,然后将数据库环境变量的值放在.env
应用程序根目录的文件中:
DATABASE_USER=my_username
DATABASE_PASSWORD=12345678
DATABASE_NAME=my_app_development
DATABASE_HOST=localhost
DATABASE_PORT=5432
RAILS_ENV=development
RACK_ENV=development
但是,Rails本身不支持从文件中读取环境变量,因此无法读取环境变量值,因此在我运行命令.env
时会引发错误:rails db:drop
Dropped database 'my_app_development'
no implicit conversion of nil into String
Couldn't drop database ''
rails aborted!
TypeError: no implicit conversion of nil into String
这是我解决它的方法:
将dotenv-rails
gem 添加到您的应用程序中Gemfile
:
gem 'dotenv-rails'
dotenv-rails
在应用程序根目录中从控制台安装gem:
bundle install
尝试再次运行所需的数据库命令。对我来说是:
rails db:drop
这次应该可以正常工作:
Dropped database 'my_app_development'
Dropped database 'my_app_development'
就这样。
我希望这有帮助