Управление безопасностью для приложения rails 3 с открытым исходным кодом, хранящегося на github - PullRequest
7 голосов
/ 10 декабря 2010

Я новичок в рельсах, с открытым исходным кодом и скоро готов к развертыванию в производственной среде. У меня есть некоторые соображения по поводу безопасности.

Как работать с database.yml, довольно хорошо, how-to-manage-rails-database-yml

Но, с моей точки зрения, в обычном приложении rails больше настроек конфигурации, которые не следует размещать в общедоступном репозитории github и развертывать в рабочей среде, например,

  • devise.rb -> config.pepper
  • secret_token.rb -> Application.config.secret_token
  • capistrano -> deploy.rb
  • ...

Добавление config / **** / * в .gitignore не только не позволит новым разработчикам установить пакет, db: create, db: migrate, rails server , но и сохранить производственную конфигурацию до дата, если установлен новый гем с инициализатором.

Другой возможностью было бы добавить environment.yml с конфиденциальной конфигурацией, например, database.yml, где конфиденциальная конфигурация в инициализаторах будет переопределена?

Это позволит легко приступить к работе после чистой проверки, а производственную среду будет легко поддерживать.

Есть идеи, как подойти к моим проблемам выше?

1 Ответ

5 голосов
/ 10 декабря 2010

Я обычно помещаю в эти файлы «безопасные» данные, которые обычно работают в целях разработки.Но в производственном процессе я символически связываю файлы с другим местоположением с помощью capistrano, например:

invoke_command "ln -sf #{shared_path}/database.yml #{release_path}/config/database.yml"

Так что на производственном сервере у меня есть куча файлов, которые переопределяют файлы в системе контроля версий.Я даже не работаю с database.yml.example, просто с некоторым нормальным database.yml, который разработчики соглашаются использовать при разработке и тестировании.

Для отдельных настроек, таких как ключи API, я обычно создаю config/settings.yml и прочитайте их из инициализатора:

SETTINGS = YAML.load(IO.read(Rails.root.join("config", "settings.yml")))
YourApp::Application.config.secret_token = SETTINGS["secret_token"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...