Контекст, в котором выполняется код, не совпадает.Одна - это консоль rails, а другая - команда резервного копирования
Что происходит, когда вы загружаете консоль Rails
Запуск консоли rails означает, что вы запускаете весь стек rails перед выполнением своего кода для него,Приложения Rack, такие как Sinatra, Rails и т. Д., Используют файл config.ru
в качестве соглашения, для которого файл должен быть запущен для загрузки.(Вы можете исследовать кроличью нору, если хотите иметь глубокое понимание этого)
Это означает, что подавляющее большинство ошибок, с которыми вы можете столкнуться во время загрузки консоли, не позволяет вам выполнить что-либо вконсоль (потому что загрузка не удалась).Вместо этого он напечатает ошибки трассировки стека, чтобы вы могли выяснить, что пошло не так, чтобы вы могли исправить и повторить попытку.
TL;DR Rails.application.credentials.username
в консоли выполняется после загрузки всего стека Rails (моделей, зависимостей, инициализаторов) в определенном порядке
Что происходит при запуске команды резервного копирования
Здесь определена команда backup
в репозитории для репозитория резервного копирования
Она выглядит следующим образом
#!/usr/bin/env ruby
# encoding: utf-8
require File.expand_path("../../lib/backup", __FILE__)
Backup::CLI.start
Если вы откроете нужный файлlib/backup.rb
и посмотрите в Gemfile, вы не найдете места, где у вас есть зависимость или определение для константы Rails.
Таким образом, когда вы запускаете команду backup
и выполняете ваш db_backup.rb, константа Rails, вызываемая здесь, ... не определена.Ruby, будучи добрым, попытается найти вложенную версию этой константы в текущей области видимости, которая является блоком Model.new do; end
.
Пока не определено, о чем вам говорит рубин с помощью NameError: uninitialized constant #<Class:#<Backup::Config::DSL:0x00007fb0db941d10>>::Rails
.