Итак, для презентации я настраиваю очень простой клон Twitter; это должно быть просто, но в то же время отображает достаточно производительности, что Play! обеспечивает. Я собираюсь пройти шаги по настройке демо-приложения, которое должно охватывать то, что было объявлено в блоге Heroku, но с чуть большей глубиной.
Первый шаг давайте создадим приложение
1
|
play new twitter |
Добавить зависимость к модулю CRUD (conf / dependencies.yml)
1
|
- play -> crud |
Получить зависимости
1
|
play dependencies |
Интеграция с IDE
(для затмения)
1
|
play eclipsify |
(для IntelliJ)
1
|
play idealize |
(для Netbeans)
1
|
play netbeansify |
Создать модель (app / models / Tweet.java)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package models; import java.util.Date; import java.util.List; import javax.persistence.Entity; import play.data.validation.MaxSize; import play.data.validation.Required; import play.db.jpa.Model; @Entity public class Tweet extends Model { @Required @MaxSize ( 140 ) public String tweet; @Required public Date createDate = new Date(); public static List findLatest() { return Tweet.find(“order by createDate desc”).fetch(); } @Override public String toString() { return this .tweet; } } |
Определить базу данных для моделей JPA (conf / application.conf)
1
|
db=${DATABASE_URL} |
Добавить действия контроллера (app / controllers / Application.java)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package controllers; import java.util.List; import models.Tweet; import play.mvc.Controller; public class Application extends Controller { public static void index() { List tweets = Tweet.findLatest(); render(tweets); } public static void create(String msg) { Tweet tweet = new Tweet(); tweet.tweet = msg; tweet.save(); render(tweet); } public static void tweets() { List tweets = Tweet.findLatest(); renderJSON(tweets); } } |
Определить основной вид (app / views / Application / index.html)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#{ extends ‘main.html’ /} #{set title:’Home’ /} <!– Create Tweet Form –> <form> <input name=”tweet” type=”text” /> <input type=”submit” value=”Tweet” /> </form><!– Latest Tweets List –> <ul> #{list tweets} <li>${_.tweet} (${_.createDate.since()})</li><p><p> #{/list}</ul> <!– JS –> <script type=”text/javascript”> // Capture Form Submit Event $(‘form’).submit(function() { // Define Create Action var createAction = #{jsAction @create (‘:tweet’) /} // Call Create Action $.post(createAction({tweet: $(‘input:first’).val()}), function(data) { // Prepend Results to the List $(‘ul’).prepend(data); $(‘input:first’).val(”); }); // Don’t let the browser redirect return false ; }); </script> |
Определить представление «Создать действие» (app / views / Application / create.html)
1
|
<li><code>${tweet.tweet} (${tweet.createDate.since()})</li> |
Создать модульный тест для модели Tweet
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
import models.Tweet; import org.junit.Assert; import org.junit.Test; import play.test.UnitTest; public class TweetTest extends UnitTest { @Test public void testModelSave() { long count = Tweet.count(); Tweet t = new Tweet(); t.tweet = “my sample tweet”; t.save(); long count2 = Tweet.count(); Assert.assertEquals(count + 1 , count2); } } |
Создать CRUD Admin для Tweet Model
1
2
3
|
package controllers; public class Tweets extends CRUD { } |
Добавить маршруты (конф / маршруты)
1
2
3
|
* /admin module:crud GET /rest/tweets Application.tweets |
Определить сообщения для CRUD Admin (conf / messages)
1
2
|
tweet=Tweet createDate=Date Created |
Определить профиль
1
|
web: play run –%$FRAMEWORK_ID –http.port=$PORT -DusePrecompiled=$USE_PRECOMPILED -DDATABASE_URL=mem |
Запустить в разработке
1
|
play run –%dev -DusePrecompiled= false -DDATABASE_URL=mem |
Создать приложение на Heroku
1
|
heroku create play-twitter –stack cedar |
heroku create play-twitter — стек кедра
Настройка Git Repository
1
|
git init; git add .; git commit -a -m “Initial Commit”; git remote add heroku [email protected]:play-twitter.git |
Настройка переменных среды Heroku
1
|
heroku config:add FRAMEWORK_ID=prod; heroku config:add USE_PRECOMPILED= true |
Развернуть в Heroku
1
|
git push heroku master |
Если что-то пошло не так, вы всегда можете проверить журнал
1
|
heroku logs |
Чтобы настроить реальную базу данных на Heroku
1
|
heroku addons:add shared-database |
Вы можете посмотреть живую демонстрацию здесь , интерфейс администратора здесь или клонировать исходный код на Github .
Ссылка: шаг за шагом для простого Twitter с Play Framework, AJAX, CRUD и Heroku от нашего партнера по JCG Фелипе Оливейры из Geek Are Totally In .
Статьи по Теме :