Ma ktoś gotowe (i mógłby się podzielić) taski Capistrano do władowania całego statycznego kontentu na asset server?
Chodzi oczywiście o aplikacyjne js, css i obrazki, ażeby mogły być serwowane przez osobny serwer pod inną domeną (docelowo: przez inną maszynę).
Wrzucacie tam odpowiednie katalogi przez ssh, czy po prostu podmontowujecie z NFS?
Nie mam gotowych tasków, ale w jednym z projektów robimy to via rsync. NFS za szybki nie jest, kopiowanie wszystkiego po SSH też mało fajne. Rsync (również może działać via ssh) zrobi przyrostowy update więc dlatego go polecam.
Możesz również po prstu robić wdrożenie całej aplikacji na 2 serwery, i z tego drugiego tylko assety serwować jak jesteś leniwy, a wszystkie assety i tak są w gicie.
OK, dzięki, poradziłem sobie. Ponieważ i tak mamy po NFS katalog shared/ oraz i tak są w nim user-uploaded obrazki (żeby oba serwery aplikacyjne pracowały na tym samym), czyli załatwiamy to w ten sposób:
set :app_symlinks, %w(group_images user_avatars)
desc "Symlinks the :app_symlinks directories from current/public to shared/public"
task :symlink_public do
if app_symlinks
app_symlinks.each do |link|
run "rm -rf #{release_path}/public/#{link}"
run "ln -nfs #{deploy_to}/#{shared_dir}/public/#{link} #{release_path}/public/#{link}"
end
end
end
to zrobiłem copypastę zmieniając treść samego zadania:
set :app_assets, %w(images javascripts stylesheets)
desc "Syncs the :app_assets directories and links them from shared/public"
task :symlink_assets do
if app_assets
app_assets.each do |link|
run "mv #{release_path}/public/#{link} #{release_path}/public/_latest_#{link}"
run "ln -nfs #{deploy_to}/#{shared_dir}/public/#{link} #{release_path}/public/#{link}"
run "rsync -a --delete #{release_path}/public/_latest_#{link}/* #{deploy_to}/#{shared_dir}/public/#{link}/"
run "rm -rf #{release_path}/public/_latest_#{link}"
end
end
end
chociaż trochę mało koszerny ten kod (tzn. wydaje mi się, że mógłby być czystszy i ładniejszy).
Jeszcze jedno: jak nie zmieniając treści domyślnych tasków, takich jak deploy:update czy deploy:update_code, uniknąć ich uruchamiania dla pewnych ról (np. mam rolę “proxy” z paroma taskami wyłącznie dla owej roli i nie chcę, żeby capistrano wrzucało mi tam kod czy próbowało restartować unicorna – tam nawet gita nie ma)?
My właśnie robimy coś podobnego by uploady serwować.
Teraz w projekcie mamy trochę większy sajgon bo CSS i JS, obrazki z CSS jest wlaściwie pobierana z innego projektu i do konca nie wiemy jak to polaczyc. HTTPS wiec nie bardzo mozna zaciagac z innych domen. Ktoś spotkał się z czymś podobnym?