سكالا/تشغيل/إنجينكس:توجيه الموارد الثابتة
-
20-12-2019 - |
سؤال
لقد قمت بتشغيل تطبيق Play الخاص بي:
http://localhost:9000
Nginx هو وكيل يقوم بتمريره إلى عنوان url هذا:
http://localhost/Demo/
لدي مشكلة مع الأصول الثابتة بالرغم من ذلك.على سبيل المثال، هذا الأصل في قالب HTML
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
يتوجه الى
http://localhost/assets/stylesheets/main.css
ومن الواضح أنه يؤدي إلى عدم العثور عليه.إذا قمت بتغييره إلى هذا (أضف /Demo
أمام عنوان URL):
<link rel="stylesheet" media="screen" href="/Demo@routes.Assets.at("stylesheets/main.css")">
سينتقل الآن بشكل صحيح إلى عنوان url هذا:
http://localhost/Demo/assets/stylesheets/main.css
سؤالي هو:كيف يمكنني إضافة هذا /Demo
إلى جميع أصولي الثابتة دون ترميزها في القوالب الخاصة بي؟أفضل حل هذه المشكلة باستخدام توجيه Play وتقييد التغييرات التي تم إجراؤها على nginx conf.
لقد حاولت إضافة بادئة عنوان url إلى application.conf
مثله
application.context="/Demo"
لكن ذلك أثر على جميع عناوين url وليس فقط العناوين الثابتة، لذلك ليس حلاً.أي أفكار؟
مجموعتي:Play Framework 2.2.1 / Scala 2.10.3 / java 8 64bit / nginx 1.4.3 / ubuntu 13.10 64bit
تحديث:حل بفضل @biesior لتوفير إصدار Java، قمت بتحويله إلى scala:
package core
import controllers.routes
object Assets {
def at(path: String): String = {
"/Demo" + routes.Assets.at(path)
}
}
المحلول
ما عليك سوى الكتابة فوق المسار باستخدام التنفيذ الخاص للأصول (على سبيل المثال.في utils
طَرد):
package utils;
import controllers.routes;
public class MyAssets {
public static String at(String path){
return "/Demo"+ routes.Assets.at(path).toString();
}
}
في القوالب:
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
ومن ناحية أخرى، هل سيعمل المشروع المستهدف أيضًا في الدليل الفرعي؟إذا لم يكن الأمر كذلك، فمن الأسهل استخدام النطاقات الفرعية، فمن الممكن أيضًا مع المضيف المحلي، فقط قم بتكوين nginx الخاص بك ليستخدمه هذا المشروع، على سبيل المثال: http://demo.loc
بدلا من ذلك http://localhost/Demo
وأضف هذا 'اِختِصاص' لك hosts
ملف