سؤال

أقوم بنشر بيئة الإنتاج الخاصة بتطبيق 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top