Dart heroku

У хостинга heroku есть возможность запустить ряд серверов java, node, php и т.д. Серверный dart в их список не входит. Но heroku дает возможность использовать свой buildpack для запуска произвольного окружения.

Сначала необходимо создать Procfile

web: ./dart-sdk/bin/dart main.dart

Тут мы говорим что точка входа в наше приложение- файл main.dart и запускать его надо утилитой dart из папки dart SDK.

Переходим к конфигурации сервера:

heroku create dart -s cedar-14

Создать приложение нужно с шаблоном cedar-14. Внутри там будет Ubuntu x64.

Теперь необходимо подключить сам SDK:

heroku config:set DART_SDK_URL=https://storage.googleapis.com/dart-archive/channels/stable/release/latest/dartium/dartium-linux-x64-release.zip

И указываем buildpack:

heroku config:add BUILDPACK_URL=https://github.com/igrigorik/heroku-buildpack-dart.git

Осталась одна хитрость. В бесплатном варианте heroku внутри себя работает по определенному порту. При каждом запуске сервера порт назначается в случайном порядке. Возможно не в случайном, но алгоритм назначения порта мне выяснить не удалось. Порт храниться в переменной окружения PORT. Нужно ее оттуда достать и скормить dart серверу. Для этого я написал небоольшой класс - хелпер:

import 'dart:io';

const debug = true;

class config {

static int getPort() {
if (debug) {
return 8080;
} else {
Map<String, String> env = Platform.environment;
return int.parse(env["PORT"]);
}
}
}

Как видно из кода, локально можно работать на любом порту, в данном случае 8080, а после деплоя код будет работать на том порту, на котором будет удобно heroku. И вот простой пример использования хелпера:

import 'dart:io';
import 'config.dart';

main() {
var port = config.getPort();

HttpServer.bind('0.0.0.0', port).then((HttpServer server) {
print('Server started on port: ${port}');

server.listen((HttpRequest request) {
var resp = "test";
request.response..headers.set(HttpHeaders.CONTENT_TYPE, 'application/json')
..write(resp)
..close();
});
});
}

Heroku кроет в себе огромные возможности, как оказалось он может еще и серверный dart

Теги:

heroku dart