From b872f377b2b88922eb4468396fd9397e0bebf9f6 Mon Sep 17 00:00:00 2001 From: hayano Date: Tue, 29 Oct 2024 00:56:12 +0000 Subject: [PATCH] Supervisor update 2 --- Dockerfile.supervisor | 9 +++++++++ config/settings.py | 6 ++++-- docker-compose.yaml | 2 ++ rog/.serializers.py.swp | Bin 0 -> 16384 bytes rog/.urls.py.swp | Bin 0 -> 16384 bytes rog/.views.py.swp | Bin 0 -> 16384 bytes rog/urls.py | 7 ++++++- rog/views.py | 20 +++++++++++++++++--- supervisor/html/.index.html.swp | Bin 0 -> 16384 bytes supervisor/html/index.html | 20 +++++++++++++++++--- supervisor/nginx/default.conf | 6 ++++++ 11 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 rog/.serializers.py.swp create mode 100644 rog/.urls.py.swp create mode 100644 rog/.views.py.swp create mode 100644 supervisor/html/.index.html.swp diff --git a/Dockerfile.supervisor b/Dockerfile.supervisor index a1c088b..6d18f76 100644 --- a/Dockerfile.supervisor +++ b/Dockerfile.supervisor @@ -13,6 +13,15 @@ RUN mkdir -p /usr/share/nginx/html \ COPY supervisor/html/* /usr/share/nginx/html/ COPY supervisor/nginx/default.conf /etc/nginx/conf.d/default.conf +# メディアディレクトリを作成 +RUN mkdir -p /app/media && chmod 755 /app/media + +# 静的ファイルをコピー +#COPY ./static /usr/share/nginx/html/static + +# 権限の設定 +RUN chown -R nginx:nginx /app/media + # Set final permissions RUN chown -R nginx:nginx /usr/share/nginx/html \ && chmod -R 755 /usr/share/nginx/html \ diff --git a/config/settings.py b/config/settings.py index 44ad25b..6c6985a 100644 --- a/config/settings.py +++ b/config/settings.py @@ -179,10 +179,12 @@ USE_TZ = True STATIC_URL = '/static/' #STATIC_URL = '/static2/' -STATIC_ROOT = BASE_DIR / "static" +#STATIC_ROOT = BASE_DIR / "static" +STATIC_ROOT = os.path.join(BASE_DIR, 'static') MEDIA_URL = '/media/' -MEDIA_ROOT = BASE_DIR / "media/" +#MEDIA_ROOT = BASE_DIR / "media/" +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') #STATICFILES_DIRS = (os.path.join(BASE_DIR, "static2"),os.path.join(BASE_DIR, "media")) diff --git a/docker-compose.yaml b/docker-compose.yaml index 3f59ebb..44e07a1 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -53,6 +53,7 @@ services: - type: volume source: nginx_logs target: /var/log/nginx + - media_data:/app/media:ro ports: - "80:80" depends_on: @@ -72,3 +73,4 @@ volumes: geoserver-data: static_volume: nginx_logs: + media_data: diff --git a/rog/.serializers.py.swp b/rog/.serializers.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..cb59a7d2a317ef7346346fef68fa2e91d09bbbdc GIT binary patch literal 16384 zcmeHOON<;x8Lqr=5-JmnW>p+Z$HLW z-MiUXCI~_f96;j2kw_rraU@6xPKXOaf)hdu{IGw36aT8HV~ zhaTOR7T3u!;23ZWI0hU8jseGjW56-s82JBWAe-Jvo`&f+8}qrj-_*FjZLY^m{iq@T zmyu6Q{ZAV5e;WB0O?}%8V8{7KL;h?-e$B|wn*M)k$lo&ZCycyn9J2b~G;+H~@vVmZ z4I^JS{oicJUpMj(8TrLqbiwL3)$ZmPa11yG90QI4$ADwNG2j?*3^)cH1CD|JNe0-E z5Ve$jSuJF7{%_a+Kfa5Q9|2zn1aKMPz(c@?fw$ieIq)p-HDCaI5_tU}A-@EE{XRmT z1HJ>ocLA@xhY$$};4-iTd=&T~@Xgx@`3CSA;IFq5@(l1akOHf~-$3-QfR}))z-Ivp z+y~qX{2hA^KLt221U?7c58MP4@zEJXYnNc5VSRONMF*WfAwP z;K%8ZM;LiImsuJ=iYzTm7(k1pD?DR55Jja;o-W$g(|LKq#0eGo_Lc}0`$@FjQ&juZ za&I0@UZz6!)^_BmNl81(yEcgSO}ToWkMXjJ;!V6z{=5l^R{hdxMe$R~>WQaA)LZky zp$Y;U#*4uvRu-oNbTv;$1D=${vdz(;-lki1?pDpawKjsYAc?*8GD(Wy_2|iPls^oi z+z~qMs+Cu6%yW?(q4t{b(&Jg6y+uKU<4LBxLOJ52q6iYYK~%bGON(XQVjxPXEp^Mf zh;Q-;4pzf!7f(-Poa16-g!K$PLiN+>b7zAon*8UEnsAm;dlw_StG5^O{vLdl zd0+XvcXxLU>VL`CW?I^qt>AZug)eIGdeo|z;e#@Hr-5s@(h33=MM2OaRxsviP$X~9 zLoxPBfljG2>7aP;gJ~LVkJF?O?=-L3tj6_8o}S<=%LSkRA+dk+qA=m}Y*TIaYFJ5w zd9n9x*&L(xYtNd8xbSf*wmrX@QZ^WKhF)e_ZFG6#PxB}pkGa5?jVj>xv7Ir`&J=a+ zAW-vyAXvckRHQLg-=)}mX;2~-U7 ztZapGgS3B%4{#H~vBhJ=3}Xz_y*owrmYr6)%!=%@CTit_G|5ER@31_ZSSwVSCt0ZI z-Bnj@3UH)uXrQYJXS3DXZhCg zO;A=Ax;|ayEcPiRNU|bJ(Z4Jm2kYBDrcH5Q4Y^-gvsOip0D z?H99+YOUr|WX52lT)Ppq{$Id){6#>m|LytqpRvaOKJY!@yTBKK&jZWABfzb|AF$qk z1$Yh^0d2qo?f`y)J%DF`Rp24uQ^0M&Z!ykGX1o{FnC@~6I0hU8jseGjW56-s7;p?Y z1{?!B7@)Y+`9m~VDz-z4Jpe4IREJ`PRUC3Ow)~H)0~Fg*Z_TNN z*%=I=*6&Ksg>rLeW=p%Ou5Z{2j?KD6ZPu`2U^V!TmJo;%j#b5y{8V1 zJp??@vG88j)>m7O$ezb2LZ?#zn>qsj!meuURokQK=xsQuwgS~& z+yG}Q8E+Szdc|L##>E~_Pv5XXXw|5D6=hqCb4->;ne1KhLK$S(7fJ=g4(Afpx`(re Pn5tWbji#RZMOr5 zx_>D8cKgbsTlJ+FPz)#r6a$I@#eiZ!F`yVw3@8Q^1BwB~z<+@Ov#MzyMcfJ6@Z
uAA#$D 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 literal 0 HcmV?d00001 diff --git a/rog/urls.py b/rog/urls.py index 1cb6e8e..863d91d 100644 --- a/rog/urls.py +++ b/rog/urls.py @@ -11,10 +11,11 @@ from .views import TestActionViewSet from .views import OwnerEntriesView, OwnerTeamsView, OwnerMembersView -from django.urls import path from . import views #from .views import NewEvent2AdminView +from django.conf import settings +from django.conf.urls.static import static router = DefaultRouter() router.register(r'newevent2', views.NewEvent2ViewSet) @@ -124,3 +125,7 @@ urlpatterns += [ # for Supervisor Web app path('test/', views.test_api, name='test_api'), ] + +if settings.DEBUG: + # 開発環境でのメディアファイル提供 + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/rog/views.py b/rog/views.py index d58c5b7..16a4e23 100644 --- a/rog/views.py +++ b/rog/views.py @@ -88,6 +88,7 @@ import xlsxwriter from io import BytesIO from django.urls import get_resolver +import os logger = logging.getLogger(__name__) @@ -2381,6 +2382,19 @@ def get_team_info(request, zekken_number): team = Team.objects.get(id=self.kwargs['team_id']) +def get_image_url(image_path): + """画像URLを生成する補助関数""" + if not image_path: + return None + + # 開発環境用のパス生成 + if settings.DEBUG: + return os.path.join(settings.MEDIA_URL, str(image_path)) + + # 本番環境用のパス生成 + return f"{settings.MEDIA_URL}{image_path}" + + @api_view(['GET']) def get_checkins(request, *args, **kwargs): #def get_checkins(request, zekken_number, event_code): @@ -2437,14 +2451,14 @@ def get_checkins(request, *args, **kwargs): 'points': c.points or 0, 'buy_flag': c.buy_flag, 'photos': location.photos if location else None, - 'image_address': c.image_address, - 'receipt_address': c.image_receipt, + 'image_address': get_image_url(c.image_address), + 'receipt_address': get_image_url(c.image_receipt), 'location_name': location.location_name if location else None, 'checkin_point': location.checkin_point if location else None, 'buy_point': location.buy_point }) - logger.debug(f"data={data}") + #logger.debug(f"data={data}") return Response(data) except Exception as e: diff --git a/supervisor/html/.index.html.swp b/supervisor/html/.index.html.swp new file mode 100644 index 0000000000000000000000000000000000000000..56342d9b5ae84155f32f1b585d0bfaea8e892995 GIT binary patch literal 16384 zcmeHOUu+!38K3^42~gTnR9=}}X>FtIuI-Q%%$*T+(~^idkz!H-56#~0_-^gl-D7vw z_651s-4V$krMN8-5dJhs7J@`Y3T=UiQXbl>FO}d4Rq8`4ZO?|6stxaX7>B$*2VrK`wq~X^g)8-ON5M4TG~HB$*JNt5)~s)L{hNv z5%?w3@f@$TaW(S&mO^8>{`bOQ$_S$h3#OdV4~(*Kx#4&=o6+UR3#e0K#eibqq8PY} z>>3>CmrcH!+d;4S@|_peT2)pIClh{|^I1DNpX)Qs<> z*H3j^-${=<((>CoDdXDa_nD!)E8IMbgNtBYblF`yVw3@8Q^1BwB~fMP%~pcqgLCw~R&b_ku^5aYO^IbG0 z9ZR(oOIq5NRZGyDwicu6My6h>b#J}!($WLZHRtEvdUmc$ zcec_x;R};*rF|oZHr=*%K1zXOQ+d)XpNHBYb?u>*uQ$??DV@MAYI`vJ*LUzP ze8!r3O3u}OTNj+9Jh;+m+J3v{TFfLS8?O) z;$!s>$K^jb`>H;iQcc5JkkyvgZlkpRN|Ch49)&J*i!A8!9K7Vo(s(*<{5)>V zqu1T~C_A!6k3PXnchuanl^`3T=KP5d&^RMxoLORRFpxP!-meJ9_b3+oh!t|V;kb_V zsu9=EVJwzTo@qYxQe6M>+qIV$AABmVJrdWRiE9tVwbOC!WL&#HZ?u}PuRq_qc@jh& zW0RB28;zv@EI&}Dweg5^TJ!^(1?i;~&+O{&Uk+wmn^tDDU9?iw2G`+${qVmKHy%qS!rZ1X z&!(6sMtpna5%&?Hz1>bsd$`>L7s31ni|4?GaZ%>^iQmY@Gj;C9$+-SpYZYB*%`6XO z-jxLIgEPG4SV;oVin!wX`K0-elJk6AUx@23W+f*O1munKz>52{8-S>0y6gzH?DM=t z!?J1n(+K4e+3(4Mx}?)>i=c%>1h0Ez_P8^e83|ve0hlEDqHkBT9uX}7wO z53Rtd2pR@fAy*cn5)K)LWqT8$ZgD@d$GI6W-SS<-oG@n$?i54gupbDs$eA&q5A4?a zm%r<-XrXbkFu`oPUbR+QWXb#E zwB*Z9iWlsKV{$FDOwI}eIuf@wRaV&yLWZVyj(uCZNpjwzJTKp)r`+^Ph1`TG%XfV1 z;KGmoxeCo7H`GZ%=!@o<2RmDjreUU~c8 zK6>BE=I?47X8Ts!W_?;+BP&IY8;IVXzrOZl^JkC7wX@BIbBiaj6^OrIC+DB`tfz}I z9x~iNQ`3I!P`R-tXPov1EUbVmru&o9rgmMkeYz+!Z@CIB40qI!wdLRr(fx-Hj_RQZ z@c;47c(pgG$RD`EzE%2U?b)4ciez!mNNZO>8>?1W&k*e~D;4gvoWPg}eXnP2JDK}q W&wOZ|K4Igb?AuUt=-}ZoG<_Gc$iL_S literal 0 HcmV?d00001 diff --git a/supervisor/html/index.html b/supervisor/html/index.html index 2d5b64f..7fed476 100755 --- a/supervisor/html/index.html +++ b/supervisor/html/index.html @@ -257,8 +257,8 @@ tr.innerHTML = ` ${checkin.path_order} - ${location.photos ? - `` : ''} + ${checkin.photos ? + `` : ''}
${checkin.photos}
@@ -424,7 +424,21 @@ calculateTotalPoints(); }); } - + + // 画像拡大表示用のモーダル関数 + function showLargeImage(src) { + const modal = document.createElement('div'); + modal.classList.add('fixed', 'inset-0', 'bg-black', 'bg-opacity-75', 'flex', 'items-center', 'justify-center', 'z-50'); + + const img = document.createElement('img'); + img.src = src; + img.classList.add('max-w-3xl', 'max-h-[90vh]', 'object-contain'); + + modal.appendChild(img); + modal.onclick = () => modal.remove(); + document.body.appendChild(modal); + } + // 新規CP追加用のモーダル function showAddCPModal() { const modal = document.createElement('div'); diff --git a/supervisor/nginx/default.conf b/supervisor/nginx/default.conf index cb99160..e59c853 100644 --- a/supervisor/nginx/default.conf +++ b/supervisor/nginx/default.conf @@ -46,6 +46,12 @@ server { index index.html; } + location = /media/ { + alias /app/media/; # MEDIA_ROOT のパス + expires 30d; # キャッシュの設定 + add_header Cache-Control "public, no-transform"; + } + error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html {