Ruby on rails rake db:seed中止,没有将nil隐式转换为字符串

Ruby on rails rake db:seed中止,没有将nil隐式转换为字符串,ruby-on-rails,terminal,seeding,Ruby On Rails,Terminal,Seeding,当我执行以下操作时: rake db:drop rake db:create rake db:migrate rake db:seed 这就是我得到的: rake aborted! no implicit conversion of nil into string app/mailers/base_mailer.rb:47:in '[]' app/mailers/base_mailer.rb:47:in 'chimp_mail' 我认为这与我的.env文件中的mailchimp变量有

当我执行以下操作时:

rake db:drop
rake db:create
rake db:migrate
rake db:seed
这就是我得到的:

rake aborted!
no implicit conversion of nil into string    
app/mailers/base_mailer.rb:47:in '[]'
app/mailers/base_mailer.rb:47:in 'chimp_mail'
我认为这与我的.env文件中的mailchimp变量有关。如何将这些变量直接传递到bash?

ENV

只有在您的环境(OS)中有可用的组件时,才能使用。毕竟,它们被称为环境变量:

操作系统(Linux、Mac OS X、Windows)提供了设置 本地环境变量,以及Heroku和其他部署 平台。这里我们展示如何在 unixshell。我们还展示了设置环境变量的两个备选方案 在应用程序中不使用Unix shell

我认为您的问题可能是您没有将环境变量设置为Rails应用程序可以在后端访问它们的方式


费加罗

我会尝试使用


这是一个gem,它允许您创建和定义任意数量的ENV变量,并在您的开发环境中访问它们。我会在用Figaro创建的
application.yml
文件中设置env变量,然后再次尝试运行
db:seed
命令

我应该提到的谜题的关键部分是我正在使用foreman。因此,我的问题的解决方案是运行“foreman rake db:reset”。

我在使用Docker处理Rails6应用程序时遇到了这个问题

问题是我将数据库连接字符串修改为
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'] %>
但是,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
以下是我解决问题的方法

将gem添加到应用程序
gem文件

gem 'dotenv-rails'
从控制台在应用程序根目录中安装gem:

DATABASE_USER=my_username
DATABASE_PASSWORD=12345678
DATABASE_NAME=my_app_development
DATABASE_HOST=localhost
DATABASE_PORT=5432

RAILS_ENV=development
RACK_ENV=development
bundle install
请尝试再次运行所需的数据库命令。对我来说是:

rails db:drop
这一次应该很好:

Dropped database 'my_app_development'
Dropped database 'my_app_development'
就这些


我希望这会有所帮助

您应该发布基本邮件代码,让我们了解出了什么问题。