2013-04-29 128 views
3

我正在研究一个Rails应用程序,并且我即将开源它。避免硬编码服务器配置

我将它部署到一个VPS服务器,配置了nginx和独角兽,跟在this RailsCast之后。

为了得到Capistrano的,Nginx的和独角兽正常工作,我不得不添加在我的config/文件夹中的一些服务器的配置文件,如deploy.rbnginx.confunicorn.rbunicorn_init.sh

我正在使用一个git存储库,并且一切工作在master分支下。换句话说,Capistrano将其从服务器上部署,而且这也是我即将开源的分支。

但是我不想让我的服务器配置文件公开。

什么是最好的解决方案?

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

或者将我的配置参数设置为环境变量并将配置文件留在存储库上会更好?

回答

1

该解决方案是我发现的最好的解决方案(以及我个人使用的解决方案)。

你应该把你的配置文件中

/path/to/deployed_app/shared 

然后在Capistrano的任务,符号链接,这些文件:

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

我已经做了两个,但因为它不是性感的看对于env变量,我结束了:

  • 有一个原始的yml文件给我的回购(预定格式像config.yml_example

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

1

你可以,如果你喜欢目前的资料库,除非你希望它是另一个名字,如仍只是开源一个组织,将主办(即导轨/导轨)。除此之外,您将要从git历史记录中删除这些文件,因为它听起来像您不希望它们公开,请参阅:https://help.github.com/articles/remove-sensitive-data以了解详细信息。

使用这些配置来完成最好的办法是建立一个共享目录,然后符号链接查看服务器上:Where do you put your app-config-files when deploying rails with capistrano and svn

0

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

优点

  • 配置的没有意外上传
  • 没有配置冲突上git pull当上游配置文件被更改
  • git pull
  • 用户没有偶然配置改变不能忘记适应git clone

缺点

  • 增加了启动或部署
  • 前需要用户额外的步骤在自述被记录,以便用户知道它
  • 用户不读谁自述可能仍然会错过它,并想知道为什么应用程序不工作

PS:这不是Rails的具体,但我去所有版本控制的方法用配置文件编辑应用程序。