TLDR : использовать переменные окружения!
Я думаю, что комментарий @ Брайса предлагает ответ, который я просто вычеркну. Кажется, один из подходов Heroku рекомендует - использовать переменные среды для хранения конфиденциальной информации (строки ключей API, пароли базы данных). Так что изучите ваш код и посмотрите, в чём у вас есть конфиденциальные данные. Затем создайте переменные среды (например, в вашем файле .bashrc), в которых хранятся значения чувствительных данных. Например для вашей базы данных:
export MYAPP_DEV_DB_DATABASE=myapp_dev
export MYAPP_DEV_DB_USER=username
export MYAPP_DEV_DB_PW=secret
Теперь в своем локальном окне вы просто обращаетесь к переменным среды всякий раз, когда вам нужны конфиденциальные данные. Например, в database.yml:
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: <%= ENV["MYAPP_DEV_DB_DATABASE"] %>
pool: 5
username: <%= ENV["MYAPP_DEV_DB_USER"] %>
password: <%= ENV["MYAPP_DEV_DB_PW"] %>
socket: /var/run/mysqld/mysqld.sock
Я думаю, что database.yml анализируется только при инициализации или перезапуске приложения, поэтому это не должно влиять на производительность. Так что это решит проблему для вашего локального развития и для публикации вашего хранилища. Лишенные конфиденциальных данных, теперь вы можете использовать тот же репозиторий для общего доступа, что и для частного использования. Это также решает проблему, если вы используете VPS. Просто подключитесь к нему по ssh и настройте переменные окружения на вашем производственном хосте, как вы делали это в своей разработке.
Между тем, если ваша производственная установка требует развертывания в режиме реального времени, когда вы не можете подключиться к производственному серверу ssh, как это делает Heroku, вам нужно посмотреть, как удаленно настроить переменные среды. Для Heroku это делается с помощью heroku config:add
. Итак, по той же статье, если у вас есть S3, интегрированный в ваше приложение, и у вас были конфиденциальные данные, поступающие из переменных среды:
AWS::S3::Base.establish_connection!(
:access_key_id => ENV['S3_KEY'],
:secret_access_key => ENV['S3_SECRET']
)
Просто попросите Heroku создать для нее переменные окружения:
heroku config:add S3_KEY=8N022N81 S3_SECRET=9s83159d3+583493190
Другим преимуществом этого решения является то, что оно не зависит от языка, а не только от Rails. Работает для любого приложения, поскольку все они могут получать переменные среды.