Как мы выяснили в обсуждении комментариев, это было связано с тем, что database.yml
не был привязан к хранилищу и поэтому оставлял рельсы без понимания, какую базу данных использовать и с какими учетными данными.
Причина, по которой я публикую этот ответ здесь, заключается в том, чтобы поделиться тем, как мы передаем database.yml
в производство, сохраняя при этом необходимое руководство по безопасности «не иметь секретов, переданных в контроль над источниками».
Поскольку все файлы конфигурации Rails поддерживают ERB, вы можете использовать его для определения секретов с помощью переменных среды. Например:
password: <%= ENV['POSTGRES_PASSWORD'] %>
И, для полноты, это наш database.yml
- который позволяет просто определить производственные учетные данные с помощью одной переменной DATABASE_URL
или оставить переменную среды пустой и при этом иметь разумный значения по умолчанию для сред разработки и тестирования:
# config/database.yml
<%
host = 'localhost'
username = 'appname_user'
password = 'dev_password_123'
database = nil
if ENV['DATABASE_URL']
matches = ENV['DATABASE_URL'].match(/:\/\/(?<username>.+):(?<password>.+)@(?<host>.+)\/(?<database>.+)$/)
if matches
host = matches[:host]
username = matches[:username]
password = matches[:password]
database = matches[:database]
end
end
%>
pg: &default
adapter: postgresql
encoding: unicode
host: <%= host %>
pool: 5
username: <%= username %>
password: <%= password %>
development:
<<: *default
database: <%= database || 'appname_dev' %>
test: &test
<<: *default
database: <%= database || 'appname_test' %>
production:
<<: *default
database: <%= database || 'appname' %>