2012-09-04 17 views
9

Mam problem na moim serwerze produkcyjnym, gdzie assetic:dump kończy się limit czasu na wdrożenie Capifony (ale nie zawsze).Czy możliwe jest skompilowanie programu Symfony2 assetic: zrzutu i wdrożenia, zamiast uruchamiać go na serwerze?

Uruchamianie assetic:dump lokalnie jest w porządku. Również wdrażanie do innego serwera (o znacznie mniejszej mocy) jest w porządku.

Aby to naprawić (i przyspieszyć wdrożenie), zastanawiałem się, czy możliwe jest uruchomienie assetic:dump przed wdrożeniem i wysłanie tych wymaganych zasobów wraz z resztą wdrożenia?

+0

Wypróbowałeś moje rozwiązanie? Uważam, że jest to mój najlepszy wkład do S.O., więc byłbym zadowolony, gdyby został zaakceptowany, jeśli zadziałał :-) – Julien

Odpowiedz

7

To trochę trudne, ja też próbuję to zrobić (java nie działa poprawnie na moim serwerze, więc wdrożenie nie powiedzie się).

Problem polega na tym, że Capifony jest wdrażany z repozytorium kontroli kodu źródłowego, a zwykle aktywa po cenach dumpingowych nie znajdują się w repozytorium (i nie powinny).

Domyślam się, że jedynym sposobem na zrobienie tego jest stworzenie zadania Capistrano (Capifony bazuje na Capistrano), które zrzuci zasoby i zsynchronizuje je na serwerze.

Edit: Oto moja próba Edit: To działa, używam go od czasu, kiedy odpowiedział na pytanie.

Jestem pewien, że istnieje wiele możliwych usprawnień, nie jestem facetem z rubinem, nie jestem też facetem od skryptów.

W swojej deploy.rb można dodać dwa zadania:

before "deploy:update_code", "deploy:dump_assetic_locally" 
after "deploy:update_code", "deploy:rsync_local_assets_to_server" 

a kod związany do tych zadań (w tym samym pliku):

namespace :deploy do 
    task :dump_assetic_locally, :roles => :web do 
    run_locally "php app/console assetic:dump --env=prod" 
    end 

    task :rsync_local_assets_to_server, :roles => :web do 
    finder_options = {:except => { :no_release => true }} 
    find_servers(finder_options).each {|s| run_locally "rsync -az --delete --rsh='ssh -p #{ssh_port(s)}' #{local_web_path}/js/ #{rsync_host(s)}:#{release_path}/web/js/" } 
    find_servers(finder_options).each {|s| run_locally "rsync -az --delete --rsh='ssh -p #{ssh_port(s)}' #{local_web_path}/css/ #{rsync_host(s)}:#{release_path}/web/css/" } 
    end 

    def local_web_path 
    File.expand_path("web") 
    end 

    def rsync_host(server) 
    :user ? "#{user}@#{server.host}" : server.host 
    end 

    def ssh_port(server) 
    server.port || ssh_options[:port] || 22 
    end 

end 
0

Komenda assetic:dump przejmuje zasoby ze wszystkich pakietów dostępnych w bieżącym środowisku i umieszcza je w postaci web/bundles (lub w miejscu, w którym użytkownik je przekazuje). Nie powinno być problemu z robieniem tego lokalnie, a następnie przeniesieniem plików.

Należy uruchomić polecenie za pomocą opcji env=prod, aby upewnić się, że wszystkie pakiety potrzebne do produkcji są generowane. Zanim uruchomisz komendę, chcesz wyczyścić web/bundles, a zasoby dla pakietów, które są używane tylko w fazie rozwoju (np. Profiler), nie są obecne.

Po prostu wykonałbym test, uruchamiając komendę lokalnie, pobierając zasoby z produkcji i porównując je. Nie mogę teraz myśleć o niczym, ponieważ css i js są dostarczane klientowi i nie powinny się różnić, gdy są generowane na różnych komputerach, ale mogę się mylić.

+0

, więc jak można to zrobić z Capifony? – ed209

-1

Jest bardzo prosty dodać do listy deploy.rb

set :dump_assetic_assets, true 
Powiązane problemy