मैं, भी, Capistrano के लिए नया हूँ, और पहली बार के लिए इसका इस्तेमाल करने के लिए एक रेल एप्लिकेशन को तैनात करने की कोशिश कर रहा मैं उत्पादन सर्वर के लिए मैं कठपुतली के साथ कॉन्फ़िगर किया।
मैं अंत में Capistrano स्रोत (और Capistrano/बंडलर, और Capistrano/रेल, और यहां तक कि sshkit और नेट ssh डिबग प्रमाणन समस्याओं का) में खुदाई करने के लिए निर्धारित करने के लिए वास्तव में कैसे सब कुछ काम करता है इससे पहले कि मैं खुद के लिए निर्णय लेने से विश्वासपात्र महसूस किया था क्या परिवर्तन मैं बनाना चाहता था। मैं तो बस उन परिवर्तनों को करने तैयार कर लिया और मैं परिणामों के साथ खुश हूँ:
# lib/capistrano/tasks/cold.rake
namespace :deploy do
desc "deploy app for the first time (expects pre-created but empty DB)"
task :cold do
before 'deploy:migrate', 'deploy:initdb'
invoke 'deploy'
end
desc "initialize a brand-new database (db:schema:load, db:seed)"
task :initdb do
on primary :web do |host|
within release_path do
if test(:psql, 'portal_production -c "SELECT table_name FROM information_schema.tables WHERE table_schema=\'public\' AND table_type=\'BASE TABLE\';"|grep schema_migrations')
puts '*** THE PRODUCTION DATABASE IS ALREADY INITIALIZED, YOU IDIOT! ***'
else
execute :rake, 'db:schema:load'
execute :rake, 'db:seed'
end
end
end
end
end
तैनाती: ठंड कार्य केवल अपने कस्टम तैनाती हुक: inidb तैनाती से पहले चलाने के लिए कार्य: विस्थापित होती है। इस तरह स्कीमा और बीज लोड हो जाते हैं, और तैनाती: निम्नानुसार कदम माइग्रेट करता है (सुरक्षित रूप से) क्योंकि चलाने के लिए कोई नया माइग्रेशन नहीं है। सुरक्षा के रूप में, मैं यह देखने के लिए परीक्षण करता हूं कि स्कीमा लोड करने से पहले schema_migrations तालिका पहले से मौजूद है या नहीं, यदि आप तैनात करते हैं: फिर ठंडा करें।
नोट: मैं कठपुतली का उपयोग कर डीबी बनाना चुनता हूं, इसलिए मैं अपने उत्पादन postgresql उपयोगकर्ता को CREATEDB विशेषाधिकार प्रदान करने से बच सकता हूं, लेकिन यदि आप Capistrano को ऐसा करना चाहते हैं, तो बस "execute: rake, 'db: create '' डीबी से पहले: स्कीमा: लोड करें, या 'डीबी: सेटअप' के साथ सभी तीन लाइनों को प्रतिस्थापित करें।
सुझाव के लिए धन्यवाद; यह मुझे अपनी खुद की वृत्ति के साथ और अधिक आरामदायक बना देता है जो तैनाती को पुनर्जीवित करता है: ठंडा जाने का रास्ता था। मैंने अपना खुद का संस्करण नीचे दिया है। – odigity