database.yml部署最佳实践

时间:2011-04-26 01:53:37

标签: ruby-on-rails deployment capistrano

我没有将我的database.yml文件检查到源代码控制中,我想知道其他人在部署时将此文件复制到服务器的做法/最佳做法。

我使用Capistrano进行部署。

3 个答案:

答案 0 :(得分:17)

目前,我保留了一个名为shared的共享文件夹,它位于我的deply_to dirs之外。我保留了我的database.yml和其他配置文件,并在部署期间有一个钩子到cp那些over。这是我执行复制的简单上限任务:

after "deploy:update_code","deploy:config_symlink"

namespace :deploy do

  task :config_symlink do
    run "cp #{shared_path}/../../shared/database.yml #{release_path}/config/database.yml"
  end
end

答案 1 :(得分:9)

我的部署脚本使用after "deploy:update_code"挂钩断开,因为该步骤似乎已尝试访问数据库。所以我这样做:

before "deploy:assets:precompile", 'deploy:symlink_shared'

namespace :deploy do

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

答案 2 :(得分:4)

我已经在这个问题上打了很长时间,并为 Capistrano 3 找到了一个更简单的解决方案。希望这有助于那些人。

我无法为我的生活获取“run”或“execute”命令以在我的deploy.rb文件中工作。事实证明,在 Capistrano 3 中,您应该将database.yml放在deployment_directory / shared文件夹下。然后,在deployment.rb文件中,将该文件包含在linked_files变量中,并在部署期间自动符号链接到同一路径。

以下是一个例子:

对于初学者,我没有将database.yml检入源代码控制。我的database.yml位于生产服务器上:

无功/网络/ MyApp的/共享/配置/ database.yml的

在我的deployment.rb中,我添加了这一行

set :linked_files, %w{config/database.yml}

在部署期间,capistrano会自动将文件符号链接到:

无功/网络/ MyApp的/当前/配置/ database.yml的

希望这可以帮助其他人。今天我真的在墙上敲打着我的头。