القضبان 4:بيئة تطوير كابيسترانو بدلا من الإنتاج؟
-
21-12-2019 - |
سؤال
أقوم بنشر بيئة الإنتاج الخاصة بتطبيق Ruby on Rails الخاص بي مع جوهرة capistrano على خادم افتراضي خاص.أقوم بتشغيل الأمر التالي للنشر:
bundle exec cap production deploy
يبدو أن كل شيء يعمل بشكل جيد ما لم أحاول التحقق من البيئة التي يعمل فيها إصدار الإنتاج الحالي الخاص بي.
إحدى الطرق التي أستخدمها للتحقق من ذلك هي تشغيل:
rails console
Rails.env
الجواب الذي أتلقاه هو "التنمية" وهو أمر مخيف للغاية.
أثناء اختبار آخر:عندما أقوم بتشغيل ما يلي في الإصدار الحالي الخاص بي:
rails db
أحصل على خطأ ينص على أنه لم يتم إنشاء mydatabase_development.
يبدو أن تطبيقي يعمل بشكل جيد ولكني لا أعرف ما إذا كان هذا سيؤدي إلى حدوث مشكلات كبيرة في المستقبل.أولاً:هل هناك طريقة لتحديد ما إذا كانت نسختي المباشرة قيد التطوير بالفعل؟ثانيًا:نظرًا لأن لدي مشكلة، كيف يمكنني تكوين capistrano لنشر بيئة الإنتاج؟
المحلول
لا تنسى rails console
ينخرط في البيئة الحالية كما تمليها RAILS_ENV
أو RACK_ENV
في بيئتك.إذا لم تقم بإعداد هذا بشكل صريح على الخادم الخاص بك، فمن المحتمل أن يكون افتراضيًا development
.
إحدى الطرق لإصلاح ذلك هي فرضه في حسابك .bash_profile
أو أي ملف تعريف Shell تستخدمه.على سبيل المثال:
export RAILS_ENV=production
من المفترض أن يجعله ذلك متاحًا وعندما تقوم بتشغيل غلاف Rails الخاص بك، سيتم تشغيله بشكل صحيح.
كملاحظة، لا ينبغي أن تكون قادرًا حتى على البدء في وضع التطوير على خادم الإنتاج الخاص بك حيث لا ينبغي أن يكون هناك إدخال بهذا الاسم في config/database.yml
.أفضل الممارسات هي تخزينها config/database.yml
فقط على خادم الإنتاج وقم بتحريكه أثناء نشر Capistrano.
أضف هذا إلى الخاص بك config/deploy.rb
:
set :linked_files, %w[
config/database.yml
]
ثم تقوم بإنشاء تكوين الإنتاج فقط shared/config/database.yml
والتي سيتم ربطها في مكانها عند النشر.تأكد من استبعاد config/database.yml
من نظام التحكم في الإصدار الخاص بك حتى لا يتم نشره.
ربما يكون السبب وراء كون موقعك على ما يرام هو أن مشغلًا مثل Passenger يتم ضبطه تلقائيًا RACK_ENV
ل production
ما لم يتم تكوين خلاف ذلك.ومع ذلك، فإن هذا لا يؤثر على الصدفة الخاصة بك، والتي يتم تعيينها افتراضيًا development
.