Rails 4 rake db:种子中止,没有将nil隐式转换为String

时间:2014-03-14 10:17:50

标签: 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变量有关。我如何将这些变量直接传递给bash?

3 个答案:

答案 0 :(得分:2)

<强> ENV

如果您的环境(OS)中有可用的ENV variables,则只能使用Figaro。毕竟,它们被称为 environment 变量:

  

操作系统(Linux,Mac OS X,Windows)提供了设置机制   本地环境变量,Heroku和其他部署也是如此   平台。这里我们展示如何在中设置局部环境变量   Unix shell。我们还展示了两种设置环境变量的方法   在没有Unix shell的应用程序中

我认为您的问题很可能是您没有设置环境变量,以至于您的Rails应用可以在后端访问它们


<强>费加罗

我会尝试使用{{3}}

这是一个宝石,可以让你创建&amp;定义任意数量的ENV变量,并在开发环境中访问它们。我会在使用Figaro创建的application.yml文件中设置env变量,并尝试再次运行db:seed命令

答案 1 :(得分:1)

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

答案 2 :(得分:0)

使用 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文件中读取环境变量,因此无法读取环境变量值,因此在我运行{{1 }}命令:

rails db:drop

这是我的解决方法

dotenv-rails宝石添加到您的应用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

Gemfile

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

gem 'dotenv-rails'

尝试再次运行所需的数据库命令。对我来说是

bundle install

它这次应该可以正常工作了

rails db:drop

仅此而已。

我希望这会有所帮助