gpt4 book ai didi

ruby-on-rails - 无法加载 'rails.application.database_configuration' 未定义的方法 '[]' for nil :NilClass

转载 作者:行者123 更新时间:2023-12-03 16:02:59 26 4
gpt4 key购买 nike

我将 database.yml 更改为在测试和开发中使用 sqlite3 数据库,在生产中使用 postgresql。我的应用程序在生产中运行良好,但是当我启动测试或开发环境时出现此错误:

Cannot load 'Rails.application.database_configuration':
undefined method'[]' for nil:NilClass (NoMethoError)

我的数据库.yml:
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
#
default: &default
adapter: sqlite3
pool: 5
timeout: 5000

development:
<<: *default
database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: db/test.sqlite3

production:
pool: 5
timeout: 5000
encoding: utf8
adapter: postgresql
host: <%= Rails.application.secrets[:database][:host]%>
database: <%= Rails.application.secrets[:database][:name]%>
username: <%= Rails.application.secrets[:database][:username]%>
password: <%= Rails.application.secrets[:database][:password]%>

最佳答案

在新的 Rails 5.1.0 中遇到了这个问题,并在新的 secret 加密文件中添加了我的变量。

您的 nil 正在发生,因为即使它正在开发中,它仍然会尝试加载所有内容,并且您正在从 nil -> something[:nil][:cant_grab_from_nil] 调用东西。快速解决方法是使用 if 语句。只有在新的 Rails 5.1 中使用 secret 加密文件时才建议这样做。

production:
pool: 5
timeout: 5000
encoding: utf8
adapter: postgresql
<% if Rails.application.secrets[:database].present? %>
host: <%= Rails.application.secrets[:database][:host]%>
database: <%= Rails.application.secrets[:database][:name]%>
username: <%= Rails.application.secrets[:database][:username]%>
password: <%= Rails.application.secrets[:database][:password]%>
<% end %>

关于ruby-on-rails - 无法加载 'rails.application.database_configuration' 未定义的方法 '[]' for nil :NilClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28698108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com