سؤال

لقد قمت بتشغيل تطبيق 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 ملف

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