Linux makina üzerinde template not found problemi

47 views
Skip to first unread message

Ersen Öztoprak

unread,
Sep 5, 2013, 3:05:01 PM9/5/13
to play-fra...@googlegroups.com
Merhaba,

linux makina üzerine deploy ettiğimiz uygulamamızı jsAction ile bazı controlların bazı actionlarına ajax ile erişim için URL almaktayız.
bu actionlardan bazıları üzerinde render methodunu çağırdımızda "Template Not Found" hatası alıyoruz.
Ancak bu URL'lere JsAction'dan geldiği şekilde lowercase değilde elle title case olarak gittiğimizde sıkıntı yaşamıyoruz.
render yerine renderTemplate ile path'leri verip erişebiliriz ancak şuan için çok maliyetli olacak.

Case sensitive olmadığı için windows'ta problem yok.

Play versiyonumuz 1.2.5, fikri olan varsa paylaşımlarını rica ederiz.

Teşekkürler. 

serdar coskun

unread,
Sep 6, 2013, 7:09:51 AM9/6/13
to play-fra...@googlegroups.com
Benzer bir durumda cozum olarak case insensitive bir filesystemde folder mount edip play'i oradan calistirmisti  Can Bican hocamiz ;)

Ama detaylar konusunda bilgisayar basinda olmadigimdan bilgi veremiyorum

Sent from Mailbox for iPhone


--
Bu e-postayı Google Grupları'ndaki "Play Framework Türkiye" adlı gruba abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için play-framework...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için, https://groups.google.com/groups/opt_out adresiniz ziyaret edin.

Can Bican

unread,
Sep 6, 2013, 7:23:15 AM9/6/13
to play-fra...@googlegroups.com
Diskte boş yer varsa ntfs ya da msdos alanı açılabilir. Yoksa kısa yoldan şöyle yapmıştık:

$ dd if=/dev/zero of=1.img bs=1MB count=100 (~100 megabytelık bir alan)
$ mkfs.ntfs (ya da mkfs.msdos ya da mkfs.hfs ...) ./1.img
$ sudo mount -t ntfs (ya da diğerleri) ./1.img /mnt

Tabi bu pansuman çözüm. Asıl çözüm için büyük/küçük harf sorunu olan template'i bulmak lazım. Düzeltmek ise özellikle OSX'te sorunluydu, harf harf düzeltmek yerine önce alakasız bir isme rename edip sonra istenen isme geri taşımak şeklinde çözüm bulmuştum.



--
Can Bican


2013/9/6 serdar coskun <coskun...@gmail.com>

Fehmi Can Sağlam

unread,
Sep 6, 2013, 7:46:41 AM9/6/13
to play-fra...@googlegroups.com
Merhaba,

Bazi actionlarda sorun yasadiginizi soylemissiniz. Yasadiginiz ve yasamadiklariniza route, action, template ve jsAction tanimi ile birlikte ornek verebilir misiniz? Standartlara uyuldugu takdirde boyle bir problem olmamasi gerekir.


2013/9/6 Can Bican <can....@gmail.com>

yalin....@gmail.com

unread,
Sep 6, 2013, 8:56:50 AM9/6/13
to play-fra...@googlegroups.com
Merhabalar,

Action'larımızın birçoğu route'lar arasında yer almıyor, çok sayıda action'umuz olduğundan -doğru yol olup olmadığını bilmemekle beraber- hepsini route'a koymak istemedik. Dünden beri biraz daha yakın inceleyince, problemin bundan kaynaklandığını düşünmeye başladık ancak yine de emin olmak istedik.

İlk örnek, çalışmayan örneğimiz:

Sayfayı tetikleyen Javascript kodu: https://gist.github.com/kojiroh/a028eb6e31f8ad4b45be
Çağırılan action: https://gist.github.com/kojiroh/02b2148c4453a27716c5
jsAction metodunun ürettiği Javascript kodu: https://gist.github.com/kojiroh/f007fca8804995301a23
Çağırılması gereken HTML dosyasının yolu: /web/AdminWeb/ParameterManagementController/center.html
Çağırılan yol: /web/adminweb/parametermanagementcontroller/center.html (Linux'un case-sensitive yapısından dolayı dosya bulunamıyor)

Gördüğünüz gibi, çalışmayan action'umuzda render() metodunu kullanıyoruz. Ancak aşağıdaki çalışan örneğimizde, renderTemplate() metodunu kullanıyoruz.

Sayfayı tetikleyen Javascript kodu: https://gist.github.com/kojiroh/0b2b5c2e77841c0cd88e
Çağırılan action: https://gist.github.com/kojiroh/1e2ccf3a8cc09d8dd91a
jsAction metodunun ürettiği Javascript kodu: https://gist.github.com/kojiroh/91faed51c2a7f85cf0bc

renderTemplate() çağırdığımız zaman sayfaların adresini elle girdiğimiz için bir problem çıkmıyor, fakat Play kodunan anladığımız üzere, render() çağırıldığı zaman sayfaya gelen HTTP request'inin yoluna bakılarak çözümleme yapıldığı, ve bu yol da tamamen lowercase olduğu için sorun çıkıyor diye anlıyoruz. İlk örneğimizin birebir aynısı olup da, ekstradan sadece route'lar arasında kaydı bulunan aynı controller'ın index() action'unda bir sorun yok. Acaba her action için routes dosyasına girdi mi yapmamız gerekiyor?

Fehmi Can Sağlam

unread,
Sep 6, 2013, 9:13:51 AM9/6/13
to play-fra...@googlegroups.com
Bir soru daha. O halde routes dosyasinin sonunda catch all acik olmali. Production'da bu sekilde kullanilmamasi gerektigi routes dosyasinda belirtiliyor olmali.

Fehmi Can Sağlam

unread,
Sep 6, 2013, 9:28:04 AM9/6/13
to play-fra...@googlegroups.com
Bir hazirlik sorusu daha:) AdminWeb bir package mi yoksa class mi?
Adina bakilinca class gibi duruyor ama bu durumda
ParameterManagementController bir inner class olmali...

2013/9/6 Fehmi Can Sağlam <fehmica...@4primes.com>:
>>>>> --

yalin....@gmail.com

unread,
Sep 6, 2013, 9:34:21 AM9/6/13
to play-fra...@googlegroups.com
Merhabalar,

Şimdi baktığımda görüyorum ki, AdminWeb bir package'mış, projeye sonradan dahil olduğum için dikkat etmemişim daha önce :)

routes dosyasında ise catch all açık gibi görünüyor, aşağıdaki satır mevcut:

*       /{controller}/{action}                  {controller}.{action}

Fehmi Can Sağlam

unread,
Sep 6, 2013, 9:36:44 AM9/6/13
to play-fra...@googlegroups.com
Hocam 2 bad practice art arda. Nasil yapacagiz?:)

http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html

2013/9/6 <yalin....@gmail.com>:

yalin....@gmail.com

unread,
Sep 6, 2013, 9:47:18 AM9/6/13
to play-fra...@googlegroups.com
Önceden yapılmış bazı hatalar malesef hep bu şekilde tesadüfen karşımıza çıkıyor, siz belirtmeseniz "bu AdminWeb neden title case yazılmış" demeyecektik :)

Yakın zamanda gireceğimiz bir code review süreci ile bu hataları tamamen ayıklamayı planlıyoruz ama, bad practice işletilmiş olsa dahi yaşadığımız sorun bundan kaynaklı değil sanıyorum?

Bu durumda önerileriniz nelerdir, package adını güncelleyip sorunun çözülüp çözülmediğine mi bakmalıyız (çözülürse hem uzun vadeli olacaktır, hem de code review sürecimizden bir madde silmiş olacaktır), yoksa view path'lerini elle, uzun uzun yapıp renderTemplate() metodunu mu kullanmalıyız (en azından code review sürecine girene kadar bize zaman tanıyacak kısa vadeli çözüm)?

Fehmi Can Sağlam

unread,
Sep 6, 2013, 1:55:41 PM9/6/13
to play-fra...@googlegroups.com
Hemen hemen tum olasiliklari deneyerek sorunu tekrarlayabildim:) Sizin
proje yapiniz eminim soyle:

app/controllers/web/adminweb/ParameterManagementController.java
app/views/web/AdminWeb/ParameterManagementController/center.html

Yukaridaki yapida play'in action adindan template'i otomatik elde
etmesini istediginizde play package, controller ve action bilgisine
bakiyor. Controller kodu icindeki package tanimi
controllers.web.adminweb oldugundan views altinda bu dizini ve onun
altinda class adinda bir dizini ariyor. Bu da bize
views/web/adminweb/ParameterManagementController dizinini verir. Oysa
ki sizin dizininiz views/web/AdminWeb/ParameterManagementController

Iki cozum var.

1. Java kodundaki package tanimini controllers.web.AdminWeb
yapin(Klasoru de isimlendirmeniz gerekecek). Ama lutfen yapmayin.
Convention'a uymuyor.
2. views/web/AdminWeb/ dizinini views/web/adminweb olarak degistirin.
Bu yontem oldukca kolay gibi. Onerebilirim.



2013/9/6 <yalin....@gmail.com>:

Fehmi Can Sağlam

unread,
Sep 6, 2013, 1:59:10 PM9/6/13
to play-fra...@googlegroups.com
Bu arada

1. Cok gerekmedikce renderTemplate kullanmayin. render() candir.
2. Cok gerekmedikce wildcard route kullanmayin. Gerekse de
kullanmayin. Guvenlik acigi dogurabilecegini herkes hayal
edebiliyordur sanirim.

yalin....@gmail.com

unread,
Sep 9, 2013, 2:21:53 AM9/9/13
to play-fra...@googlegroups.com
Merhabalar,

İlginiz için teşekkürler, haftasonu olduğu için biraz sessiz kaldık. Bahsettiğiniz çözümlere odaklanıyor olacağız, hazır code review'a gidilecekken 2 bad practice'i best practice'e çevirerek 2 maddeyi silmek en sağlıklısı gibi :)

Fehmi Can Sağlam

unread,
Sep 9, 2013, 2:47:33 AM9/9/13
to play-fra...@googlegroups.com
Bu arada sirket ismi nedir? Malum cok fazla Play kullanan sirket yok.
Google grubunu acali 2 yil oldu ama sanirim bunlar sizin ilk
mesajlariniz. Play kullanmaya yeni mi basladiniz?

2013/9/9 <yalin....@gmail.com>:

Ersen Öztoprak

unread,
Sep 9, 2013, 11:13:52 AM9/9/13
to play-fra...@googlegroups.com
Merhaba,
şirketimizin ismi NCO(nco.com.tr).
Play kullanımında yeni sayılırız.

Son olarak aşağıdaki gibi bir paketlendirme yaptık:

app/controllers/web/adminweb/ParameterManagementController.java 
app/views/web/adminweb/ParameterManagementController/center.html

Javascript dosyası içinde de aşağıdaki gibi bir çağrım mevcut:

var parameterManagement = #{jsAction @web.adminweb.ParameterManagementController.center() /} 

ancak bu center method çağrımı için route tanımı yok!
jsAction arka tarafta;

var pattern = '/web.adminweb.parametermanagementcontroller/center';

olarak bir path yaratıyor.
Play'in Controller.class sınıfının template methodunda route olmayınca play

views/web/adminweb/parametermanagementcontroller/center.html

sayfasını yüklemeye çalışıyor.
Bu path linux'un case sensitive yapısına uymayınca çakıyor.
route içine

GET                  /parameterMalenagement/center                                   web.adminweb.ParameterManagementController.center

ekleyince play'i biraz daha doğru kullanmış olduk sanki.
Yardımlarınız için çok teşekkür ederiz.


9 Eylül 2013 09:47 tarihinde Fehmi Can Sağlam <fehmica...@4primes.com> yazdı:
Reply all
Reply to author
Forward
0 new messages