2012-09-04 36 views
9

मुझे अपने उत्पादन सर्वर पर कोई समस्या है जहां assetic:dump कैपिफोनी परिनियोजन (लेकिन हमेशा नहीं) पर समय निकाल रहा है।क्या Symfony2 परिसंपत्ति को संकलित करना संभव है: इसे सर्वर पर चलाने के बजाए डंप करें और तैनात करें?

assetic:dump स्थानीय रूप से चल रहा है ठीक है। एक अलग स्टेजिंग (बहुत कम शक्तिशाली) सर्वर पर तैनाती भी ठीक है।

इसे ठीक करने के लिए (और तैनाती की गति), मैं सोच रहा था कि तैनाती से पहले assetic:dump चलाने के लिए संभव है और बाकी की तैनाती के साथ उन अनुपालन संपत्तियों को भेज दें?

+0

क्या आपने मेरा समाधान करने की कोशिश की है? मेरा मानना ​​है कि यह एसओ में मेरा सबसे अच्छा योगदान है, इसलिए अगर यह काम करता है तो मुझे यह स्वीकार करने में खुशी होगी :-) – Julien

उत्तर

7

यह थोड़ा मुश्किल है, मैं यह भी करने की कोशिश कर रहा हूं (जावा मेरे सर्वर पर ठीक से काम नहीं कर रहा है, इसलिए तैनाती विफल हो जाती है)।

समस्या यह है कि कैपिफोनी एक स्रोत नियंत्रण भंडार से तैनात है, और आम तौर पर डंप संपत्तियां भंडार पर नहीं होती हैं (और उन्हें नहीं करना चाहिए)।

तो मुझे लगता है कि ऐसा करने का एकमात्र तरीका कैपिस्ट्रानो कार्य (कैपिफोनी कैपिस्ट्रानो पर आधारित है) बनाना है जो संपत्ति को डंप करेगा और उन्हें सर्वर पर rsync करेगा।

संपादित करें: यहाँ मेरी प्रयास संपादित है: यह काम करते हैं, मैं इसे प्रयोग कर रहे है के बाद से मैं सवाल का जवाब दे।

मुझे यकीन है कि बहुत सारे संभावित सुधार हैं, मैं एक रूबी लड़का नहीं हूं, मैं एक शेल स्क्रिप्ट लड़का नहीं हूं।

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

और (एक ही फाइल में) उन कार्यों से जुड़े कोड:

अपने deploy.rb में आप दो कार्यों को जोड़ सकते हैं

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

कमांड assetic:dump वर्तमान वातावरण में उपलब्ध सभी बंडलों से संपत्ति लेता है और उन्हें web/bundles (या जहां आप इसे बताते हैं) में रखता है। इसे स्थानीय रूप से करने और फिर फ़ाइलों को स्थानांतरित करने में कोई समस्या नहीं होनी चाहिए।

आपको उत्पादन में आवश्यक सभी बंडलों को उत्पन्न करने के लिए env=prod विकल्प के साथ आदेश चलाया जाना चाहिए। आप आदेश चलाने से पहले web/bundles को भी साफ़ करना चाहते हैं ताकि बंडलों के लिए संपत्तियां जिनका उपयोग केवल विकास में किया जाता है (उदा। प्रोफाइलर) मौजूद नहीं हैं।

मैं स्थानीय स्तर पर आदेश चलाकर, परीक्षण से संपत्ति डाउनलोड करके और उनकी तुलना करके परीक्षण करूँगा। मैं अभी कुछ भी नहीं सोच सकता क्योंकि सीएसएस और जेएस क्लाइंट को सेवा प्रदान करता है और अलग-अलग मशीनों पर उत्पन्न होने पर अलग नहीं होना चाहिए, लेकिन मैं गलत हो सकता हूं।

+0

तो कैपिफोनी के साथ यह कैसे किया जा सकता है? – ed209

-1

में जोड़ने के लिए बहुत आसान है अपने deploy.rb

set :dump_assetic_assets, true