سؤال

أنا أقوم ببناء محرك قمت بتجميعه كجوهرة (GMAPS4Rails). قمت بنسخ /الجمهور من محركي في تطبيق /تطبيق Rails الخاص بي.

كل شيء يعمل بشكل جيد في التطوير ولكنه يفشل في العمل في الإنتاج: يبدو أنه لم يتم العثور على أصول ثابتة (لمحرك وتطبيقي الرئيسي).

تخبر السجلات بما يلي (مجرد ملخص):

Started GET "/javascripts/application.js?1286294679" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010

ActionController::RoutingError (No route matches "/javascripts/application.js"):


Rendered /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/gems/1.8/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.1ms)


Started GET "/stylesheets/gmaps4rails.css?1290554221" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010

ActionController::RoutingError (No route matches "/stylesheets/gmaps4rails.css"):

لقد فعلت بعض الأشياء:

  1. في Production.rb ، قمت بتعيين:

    config.serve_static_assets = صحيح

    هذا يحل المشكلة ولكنه ليس أنيقًا بما فيه الكفاية ، أود الاحتفاظ بها إلى خطأ وإضافة التكوين في المحرك :)

  2. اتبعت النصيحة هنا بدون نجاح.

هل كانت مفيدة؟

المحلول

لسبب الأداء ، يتم تعطيل الأصول الثابتة في وضع الإنتاج. يجب تكوين خادم الويب الخاص بك لخدمة الأصول.

انظر إلى هذا نقاش إذا كنت تستخدم NGINX كخادم ويب.

نصائح أخرى

في Rails 3.x حاول تعيين هذا في التكوين/البيئات/الإنتاج.

config.serve_static_assets = صحيح

بشكل افتراضي ، تفترض القضبان أنك تستخدم خادم أصول (LightTTP أو Nginx أو Apache)

في محركك ، استبدل:

initializer "static assets" do |app|
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end

مع:

initializer "static assets" do |app|
      app.middleware.insert_before(::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public")
end

هل حاولت إضافة هذا إلى Rails :: Engine Class:

initializer "static assets" do |app|
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end

سيؤدي ذلك إلى دمج في دليل GEM /العام الخاص بك مع التطبيق في وقت التشغيل.

كان لدي مشكلة مماثلة تصاعد محرك قضبان 3.1. كنت أتلقى أصول فارغة في المسرح والإنتاج.

لقد وجدت حلاً في http://jonswope.com/2010/07/25/Rails-3-Engines-Plugins-and-static-assets/comment-page-1/#comment-87 وقم بتعديلها لتناسب القضبان 3.1 مواقع الأصول:

initializer "static assets" do |app|
  app.middleware.insert_before ::Rack::Lock, ::ActionDispatch::Static, "#{root}/app/assets"
end

أتصور أن هناك طريقة أكثر أناقة ولكن جهودي اليوم لم يسفر عن أي شيء كبير.

لا أعرف الكثير عن الطريق ، يتم تعبئة الأحجار الكريمة/صنعها. ولكن لماذا لا يمكنك نسخ الصور/JS/CSS من مجلد GEMS الخاص بك في المجلد العام للتطبيقات؟ لقد فعلت ذلك للتو وعملت بالنسبة لي. أليس هذا هو الشيء الذي تم القيام به؟

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