Capistrano部署不会将config / environments / * .rb文件复制到服务器

时间:2015-11-18 07:57:43

标签: ruby-on-rails capistrano

我正在尝试使用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:

但配置是在不同的环境文件中设置的,它们不会被复制。

2 个答案:

答案 0 :(得分:1)

Capistrano默认不会跳过config / environments目录,所以如果你没有将它添加到.gitignore(并且它在repo中),并且你还没有将它添加到“linked_dirs”,那么它应该被拉来自repo就像任何其他文件/目录一样。

答案 1 :(得分:0)

好的,我发现了问题。开发人员已将此行添加到.gitattributes

config/environments/ export-ignore

因此,当capistrano完成部署存档时,文件未包含在内。