2017-05-24 16 views
0

私はCapistranoを初めて使っていますが、私はカスタム展開のためにそれを稼働させることに成功しました。私は、MoodleをAWSと1つまたは複数の静的サーバーに自動スケーリンググループを持つクラスタに導入する必要があります。Capistrano 3:異なる展開フローを処理する方法

素晴らしいです!

namespace :moodle do 

    desc 'Save config.php from current release directory' task :'save-config' 
    on roles(:web) do 
     execute :sudo, :cp, shared_path.join('config.php'), release_path 
     execute :sudo, :chown, 'www-data-aulatp:www-data', release_path.join('config.php') 
    end 
    end 

    desc 'Copy config.php to release directory' task :'restore-config' do 
    on roles(:web) do 
     execute :sudo, :cp, shared_path.join('config.php'), release_path 
     execute :sudo, :chown, 'www-data-aulatp:www-data', release_path.join('config.php') 
    end 
    end 

    desc 'Enable maintenance mode on Moodle site' task :'enable-maintenance' do 
    on roles(:admin) do 
     execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'maintenance.php'), '--enable' 
    end 
    end 

    desc 'Disable maintenance mode on Moodle site' task :'disable-maintenance' do 
    on roles(:admin) do 
     execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'maintenance.php'), '--disable' 
    end 
    end 

    desc 'Purge all internal Moodle caches' task :'purge-caches' do 
    on roles(:admin) do 
     execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'purge_caches.php') 
    end 
    end 
end 

before 'deploy:starting', 'moodle:save-config' 
before 'deploy:updated',  'moodle:enable-maintenance' 
after 'deploy:updated',  'moodle:restore-config' 
after 'deploy:finished', 'moodle:enable-maintenance' 
after 'deploy:finished', 'moodle:disable-maintenance' 
after 'deploy:finished', 'moodle:purge-caches' 

問題は、時々私は速いが展開する、有効にする必要がありません小さなパッチを作成する必要がありますされています。私は問題なくメンテナンスとクリアキャッシュに自分のサイトを置くためにカスタムタスクで流れを変えるために管理していますメンテナンスモードを無効にするか、またはキャッシュをパージします。

カピストラーノで可愛いですか?

私はcapistrano-patchも探しています。これは、完全なデプロイメントプロセスを作成せずにすべてのサーバーに簡単なパッチを展開する方法です。それは何年も更新されていないようですが、私はcapistrano 3で動作しないと思います。

+0

私は以下の回答を追加しましたが、capistrano-patchにはコメントしませんでした。私はCapistrano 3に相当するものは知らない。 –

答えて

0

バイパスする必要があることを示す環境変数を使用できます。例えば、あなたはNO_CACHE_PURGE=true cap production deployとあなたのデプロイを実行し、その後のようなもので、関連するコードをラップできます。あなたがよくRubyのを知って、あなたはこれを自動化したい場合、あなたはおそらくのいくつかを単純化する方法を書くことができ

desc 'Purge all internal Moodle caches' 
task :'purge-caches' do 
    if ENV['NO_CACHE_PURGE'].nil? 
    on roles(:admin) do 
     execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'purge_caches.php') 
    end 
    else 
    puts 'Skipping purge-caches due to env variable' 
    end 
end 

これは(次のコードはテストされていません):

def disableable_task(*args) 
    if ENV[args[:env_name]].nil? 
    task(args) 
    else 
    puts "Skipping #{args[0]} due to #{args[:env_name]} environment variable being set" 
end 

desc 'Purge all internal Moodle caches' 
disableable_task :'purge-caches', env_name: 'NO_CACHE_PURGE' do 
    on roles(:admin) do 
    execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'purge_caches.php') 
    end 
end 
関連する問題