Статьи

Шаг за шагом для простого Twitter с Play Framework, AJAX, CRUD и Heroku


31 августа 2011 года: я буду иметь большую честь представить нашу любимую Play Framework на конференции Salesforce Dreamforce здесь, в Сан-Франциско, штат Калифорния.
Если вы участвуете, пожалуйста, не стесняйтесь проверить это или просто зайти, чтобы поздороваться. Спасибо
Zenexity за предоставленную возможность! Я всегда рад помочь распространить информацию об этой удивительной структуре!

 

Итак, большое объявление вышло — Heroku начала предлагать встроенную поддержку приложений Play Framework! Если вы этого не слышали, ознакомьтесь с постом Джеспера Йоргенсена в блоге Heroku.

 

Итак, для презентации я настраиваю очень простой клон Twitter; это должно быть просто, но в то же время отображает достаточно производительности, что Play! обеспечивает. Я собираюсь пройти шаги по настройке демо-приложения, которое должно охватывать то, что было объявлено в блоге Heroku, но с чуть большей глубиной.

 

 

  • Первый шаг давайте создадим приложение
  • играть в новый твиттер

     

     

  • Добавить зависимость к модулю CRUD (conf / dependencies.yml)
  • — играть -> груда

     

     

  • Получить зависимости
  • игровые зависимости

     

     

  • Интеграция с IDE
  • играть в eclipsify (для Eclipse), играть в идеализировать (для IntelliJ) или играть в netbeansify (для Netbeans).

     

     

  • Создать модель (app / models / Tweet.java)
  • 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)
  • дб = $ {DATABASE_URL}

     

     

  • Добавить действия контроллера (app / controllers / Application.java)
  • 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)
  • #{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)
  • <!-- Single Item Render (after save action) -->
    
    <li><code>${tweet.tweet} (${tweet.createDate.since()})</li>
    

     

     

  • Создать модульный тест для модели Tweet
  • 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
  • package controllers;
    public class Tweets extends CRUD {
    }
    
  • Добавить маршруты (конф / маршруты)
  • * / модуль администратора: crud

     

     

  • Определить сообщения для CRUD Admin (conf / messages)
  • tweet = Tweet

    createDate = Дата создания

     

     

  • Определить Procfile
  • web: play run -% $ FRAMEWORK_ID —http.port = $ PORT -DusePrecompiled = $ USE_PRECOMPILED -DDATABASE_URL = mem

     

     

  • Запустить в разработке
  • запустить игру -% dev -DusePrecompiled = false -DDATABASE_URL = mem

     

     

  • Создать приложение на Heroku
  • Heroku создать Play-Twitter — стека кедра

     

     

  • Настройка Git Repository
  • git init; git add.; git commit -a -m «Начальный коммит»; git remote добавь герою [email protected]: play-twitter.git

     

     

  • Настройка переменных среды Heroku
  • Конфигурация heroku: добавить FRAMEWORK_ID = prod; Конфигурация heroku: добавить USE_PRECOMPILED = true

     

     

  • Развернуть в Heroku
  • гит пуш герой мастер

     

     

  • Если что-то пошло не так, вы всегда можете проверить журнал
  • Герои бревен

     

     

  • Чтобы настроить реальную базу данных на Heroku
  • дополнения к Heroku: добавить базу данных

     

    Вы можете посмотреть живую демонстрацию здесь , интерфейс администратора здесь или клонировать исходный код на Github .

     

    Вуаля! Теперь иди играть !

     

    Первоначально опубликовано на geeks.aretotally.in/twitter-playframework-heroku .