2015-04-17 73 views
0

首先,很新的Capistrano的,所以请原谅我newbness。Capistrano的:覆盖shared_dir变量

我部署一个笨的应用程序,我有生活,我试图建立符号链接到当前web目录之外的数据文件夹。这是我用来创建符号链接

set :shared_dir, %w(/var/www/website/) 
set :linked_dirs, %w{43b621acdfc9523443f27b7767e} 

这是部署的应用程序的结果

43b621acdfc9523443f27b7767e -> /var/www/website/shared/43b621acdfc9523443f27b7767e 

我的目标是覆盖shared_dir变量产生的

/var/www/website/43b621acdfc9523443f27b7767e 
一个符号链接

我使用Capistrano的3.任何了解不胜感激。 谢谢

回答

0

您可以创建一个特定的任务,负责创建和更新每个部署中应用程序中任何位置到系统中任何位置的符号链接。例如:

namespace :terminal do 
    task :link_external_dir, :except => { :no_release => true } do 
    capifony_pretty_print '--> Generating soft link with external_example_dir' 
    run "sharedWebDir=#{shared_path}/web; cd $sharedWebDir; if [ -d $sharedWebDir/internal_example_dir -o -f $sharedWebDir/internal_example_dir ]; then rm -rf $sharedWebDir/internal_example_dir; fi; if [ ! -L $sharedWebDir/internal_example_dir ]; then ln -s /srv/example/vhost/external_example_dir $sharedWebDir/internal_example_dir; fi;" 
    capifony_puts_ok 
    end 
    task :rm_shared_example_dir, :except => { :no_release => true } do 
    capifony_pretty_print '--> Removing sharedDir/internal_example_dir symlink' 
    run "sharedWebDir=#{shared_path}/internal_example_dir; if [ -L $sharedWebDir/internal_example_dir ]; then rm $sharedWebDir/internal_example_dir; fi;" 
    capifony_puts_ok 
    end 
end 

现在呼吁每个功能上的每个部署:

before "deploy", "terminal:rm_shared_example_dir" 
after "deploy", "deploy:cleanup" 
after "deploy", "terminal:link_external_dir" 

我们正在努力做到的是:

1.Before部署,从你的主要sharedDir删除文件链接到您的外部目录。

REMOVE 
/var/www/website/shared/externalDir -> /srv/example/vhost/external_example_dir 

2.部署您的应用程序。

3.Generate再次自定义符号链接。

ln -s /srv/example/vhost/external_example_dir $sharedWebDir/internal_example_dir