避免硬编码服务器配置

时间:2013-04-29 15:34:04

标签: ruby-on-rails git github nginx unicorn

我正在开发一个Rails应用程序,我即将开源它。

我正在this RailsCast之后将其部署到配置了nginx和unicorn的VPS服务器。

为了让Capistrano,Nginx和Unicorn正常工作,我不得不在我的config/文件夹中添加一些服务器配置文件,例如deploy.rbnginx.conf,{{1} }和unicorn.rb

我正在使用git存储库,一切都在unicorn_init.sh分支下运行。换句话说,Capistrano从中拉出来部署在服务器上,而且,这就是我即将开源的分支。

但是我不希望我的服务器配置文件是公共可用的。

什么是最好的解决方案?

我应该将它分叉并将一个存储库设置为官方公共存储库,并使用另一个存储库作为我自己的版本,并将官方存储库设置为我的上游吗?

或者最好将配置参数设置为环境变量,并将配置文件保留在存储库中?

4 个答案:

答案 0 :(得分:1)

这个解决方案是我发现的最好的解决方案(也是我个人使用的解决方案)。

您应该将配置文件放在

/path/to/deployed_app/shared

然后在capistrano任务中,sym链接到这些文件:

namespace :deploy do
  task :symlink_shared do
    run "ln -s #{shared_path}/database.yml #{release_path}/config/"
  end
end

before "deploy:restart", "deploy:symlink_shared"

答案 1 :(得分:1)

我已经做到了,但是因为找到env变量并不那么性感,所以我最终:

  • 使用原始yml文件在我的仓库中提供预期的格式(命名为config.yml_example

  • 在符号链接目录中的服务器上有实际yml个文件

答案 2 :(得分:1)

如果您愿意,您仍然可以只打开当前存储库,除非您希望它在另一个名称下,例如将托管的组织(即rails / rails)。除此之外,您将要从git历史记录中删除这些文件,因为听起来您不希望它们公开,请参阅:https://help.github.com/articles/remove-sensitive-data以获取详细信息。

完成使用这些配置的最佳方法是在服务器上设置一个共享目录,然后进行符号链接,请参阅:Where do you put your app-config-files when deploying rails with capistrano and svn

答案 3 :(得分:0)

不要将配置文件置于版本控制之下。而是创建具有.dist文件名后缀的默认或示例版本,并将原始文件名放在.gitignore中以防止意外上载。然后,用户必须在启动应用程序之前将myconfig.conf.dist复制到myconfig.conf

<强>优点

  • 没有意外上传配置
  • 上游配置文件更改时git pull上没有配置冲突
  • git pull
  • 上没有意外配置更改
  • 用户不能忘记在git clone
  • 之后调整配置

<强>缺点

  • 在开始或部署之前为用户添加了一个额外的步骤
  • 需要在自述文件中记录,以便用户知道它
  • 读取自述文件的用户可能仍然会错过它并想知道该应用程序无效的原因

P.S。:这不是Rails特定的,但是我可以使用配置文件来访问所有版本控制的应用程序。