Итак, для презентации я настраиваю очень простой клон 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;@Entitypublic 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:crudGET /rest/tweets Application.tweets |
Определить сообщения для CRUD Admin (conf / messages)
|
1
2
|
tweet=TweetcreateDate=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 git@heroku.com: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 .
Статьи по Теме :