当我执行以下操作时:
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?
答案 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
仅此而已。
我希望这会有所帮助