سؤال

لا يمكن للقضبان تحميل (404 خطأ) ملفات CSS & JS على الإنتاج ولكن ليس لديها مشكلة في تحميلها في التطوير.

أنا أستخدم Capistrano للنشر وتشغيل القضبان 3. طريقي على التطوير هو /www/myapp لكن طريقي إلى الإنتاج هو /www/myapp/الحالي.

يبدو أن التطبيق نفسه يعمل بشكل جيد ، لذلك يبدو أن المشكلة معزولة بملفات CSS/JS.

حاولت ضبط Rails_root متغير ل /www/myapp/الحالي في البيئات/الإنتاج لكنها لم تحدث أي فرق ، لا تزال الملفات لا يتم تحميلها.

إليك المكدس الكامل من سجل الإنتاج:

Started GET "/stylesheets/scaffold.css?1280867531" for 98.173.61.21 at 2010-08-04 17:04:05 -0700

ActionController::RoutingError (No route matches "/stylesheets/scaffold.css"):
/usr/local/rvm/gems/ruby-1.9.2-rc2/gems/actionpack-3.0.0.beta4/lib/action_dispatch/middleware/show_exceptions.rb:55:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0.beta4/lib/rails/rack/logger.rb:14:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/rack-1.1.0/lib/rack/runtime.rb:17:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/rack-1.1.0/lib/rack/lock.rb:11:in `block in call'
  <internal:prelude>:10:in `synchronize'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/rack-1.1.0/lib/rack/lock.rb:11:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0.beta4/lib/rails/application.rb:145:in `call'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0.beta4/lib/rails/application.rb:81:in `method_missing'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:642:in `process_client'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:715:in `block in worker_loop'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:713:in `each'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:713:in `worker_loop'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:604:in `block (2 levels) in spawn_missing_workers'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:601:in `fork'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:601:in `block in spawn_missing_workers'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:597:in `each'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:597:in `spawn_missing_workers'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:611:in `maintain_worker_count'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:270:in `start'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/lib/unicorn.rb:29:in `run'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/gems/unicorn-1.1.2/bin/unicorn:123:in `<top (required)>'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/bin/unicorn:19:in `load'
  /usr/local/rvm/gems/ruby-1.9.2-rc2/bin/unicorn:19:in `<main>'
هل كانت مفيدة؟

المحلول

تبدو رسالة الخطأ أن تطبيق Rails الخاص بك هو الحصول على طلب للحصول على ملف ثابت. لا يقدم Rails 3 ملفات ثابتة بشكل افتراضي ، حيث يمكن لخادم الويب أن يفعل بشكل أفضل. يجب عليك التحقق من تكوين خادم الويب الخاص بك. يجب تكوينه للمظهر أولاً ، إذا كان هناك ملف ثابت في الدليل العام لطلب ما وإعادة توجيه الطلب فقط إلى تطبيق Rails ، إذا لم يكن هناك ملف ثابت.

بدلاً من ذلك ، يمكنك تمكين القضبان من تقديم ملفات ثابتة أيضًا config.serve_static_assets = true في التكوين/البيئات/الإنتاج. ومع ذلك ، لا ينصح بذلك في الإنتاج ، حيث لا ينبغي عليك حقًا أن تضيع موارد معالجة تطبيق Rails فقط لتقديم الملفات الثابتة. من الأفضل أن تخبر خادم الويب للقيام بذلك.

نصائح أخرى

لقد أصلحت هذه المشكلة عن طريق تشغيل هذا الأمر:

RAILS_ENV=production rake assets:precompile

المرجعي: http://guides.rubyonrails.org/asset_pipeline.html

بيئتي Nginx + Unicorn + Rails4

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