1

ローカルで capistrano を使用してアセットをプリコンパイルし、これらのアセットを rsync でアップロードした後、次のコードをオンにしますdeploy.rb:

namespace :assets do
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0
        run_locally("rm -rf public/assets/*") 
        run_locally "bundle exec rake assets:precompile"
        find_servers_for_task(current_task).each do |server|
         #clean server assets before upload local new assets
         run_locally "rsync -vr --exclude='.DS_Store' --recursive --times --rsh=ssh --compress --human-readable --progress public/assets #{user}@#{server.host}:#{shared_path}/"
        end
      else
        puts "Skipping asset pre-compilation because there were no asset changes"
      end
    end
  end

問題は、展開するたびにフォルダー#{shared_path}/assetsが急速に大きくなることです。

rm -rf public/assets/*ローカルの新しいアセットをオンラインでアップロードする前に、本番サーバーでコードを実行する必要があります#clean server assets before upload local new assets

どうすればいいですか?

4

3 に答える 3

2

タスクを作成して :precompile タスクの前に実行するだけです。

task :clean_assets do 
  ...
end

// tell capistrano when you want to run this task
before 'precompile', 'clean_assets
于 2013-01-15T14:54:24.107 に答える
2

このフォルダーが非常に大きい場合にアセットを削除するための修正は次のとおりです。

run %Q{cd #{shared_path} && rm -rf assets/* }

以前は、必要に応じて、共有フォルダーへのパスを次のように設定しました。

set :shared_path, "path_to_your_shared_folder"

この質問の最終的なコードは次のとおりです。

namespace :assets do
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0
        run_locally("rm -rf public/assets/*") 
        run_locally "bundle exec rake assets:precompile"
        find_servers_for_task(current_task).each do |server|
         run %Q{cd #{shared_path} && rm -rf assets/* }
         run_locally "rsync -vr --exclude='.DS_Store' --recursive --times --rsh=ssh --compress --human-readable --progress public/assets #{user}@#{server.host}:#{shared_path}/"
        end
      else
        puts "Skipping asset pre-compilation because there were no asset changes"
      end
    end
  end
于 2013-01-15T16:23:45.503 に答える