首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails: rake db:种子已中止,没有将nil隐式转换为字符串

Rails: rake db:种子已中止,没有将nil隐式转换为字符串
EN

Stack Overflow用户
提问于 2014-03-14 18:17:50
回答 3查看 2.4K关注 0票数 3

当我执行以下操作时:

代码语言:javascript
复制
rake db:drop
rake db:create
rake db:migrate
rake db:seed

这是我得到的:

代码语言:javascript
复制
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?

EN

回答 3

Stack Overflow用户

发布于 2014-03-14 21:03:50

增强版

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

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

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

费加罗

我会尝试使用Figaro

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

票数 2
EN

Stack Overflow用户

发布于 2014-03-16 03:00:01

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

票数 1
EN

Stack Overflow用户

发布于 2020-08-07 14:45:02

在使用Docker开发Rails Docker 6应用程序时,我遇到了这个问题。

问题是我将数据库连接字符串修改为config/database.yml文件中的环境变量:

代码语言:javascript
复制
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文件中:

代码语言:javascript
复制
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命令时抛出了一个错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
gem 'dotenv-rails'

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

代码语言:javascript
复制
bundle install

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

代码语言:javascript
复制
rails db:drop

这一次它应该可以很好地工作:

代码语言:javascript
复制
Dropped database 'my_app_development'
Dropped database 'my_app_development'

就这样。

我希望这对有帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22402143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档