我正在尝试使用Capistrano 3.4将多环境/多阶段rails 4项目部署到不同的服务器。
我在git存储库中的config/environments/<environment>.rb
中有所有文件,然后使用config/secrets.yml
来处理不应该在git中的内容。
但是,部署时,config/environments/
目录不存在。
我可以将环境文件添加为链接文件,并将其存储在共享目录中。但我想直接从git使用该版本。
E.g。
set :linked_files, %w{config/database.yml config/secrets.yml config/environments/production.rb}
那么,我怎样才能告诉Capistrano将config/environments/
中的所有文件都包含在部署中?
更新:
我的deploy/production.rb
看起来像这样
set :branch, 'master'
set :env, 'production'
set :rails_env, fetch(:env)
server 'prod-server.domain.tld',
user: 'deploy',
roles: %w{web app db}
set :deploy_to, "/u/apps/my_app_#{fetch(:env)}"
# Default value for :pty is false
set :pty, true
set :linked_files, %w{config/database.yml config/secrets.yml}
set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system cache}
namespace :deploy do
after :updated, :cleanup # clean up assets
before :compile_assets, :migrate # migrate db
before :published, :compile_assets # compile new assets
end
部署时,我实际上多次出现此错误
config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:
但配置是在不同的环境文件中设置的,它们不会被复制。
答案 0 :(得分:1)
Capistrano默认不会跳过config / environments目录,所以如果你没有将它添加到.gitignore(并且它在repo中),并且你还没有将它添加到“linked_dirs”,那么它应该被拉来自repo就像任何其他文件/目录一样。
答案 1 :(得分:0)
好的,我发现了问题。开发人员已将此行添加到.gitattributes
。
config/environments/ export-ignore
因此,当capistrano完成部署存档时,文件未包含在内。