Rails 404 خطأ لملفات ورقة الأنماط أو JavaScript
-
25-09-2019 - |
سؤال
لا يمكن للقضبان تحميل (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