@haskellru

Страница 1538 из 1551
Alex
21.10.2018
06:24:53
Получил следующее play :: (Coord, Coord) -> Coord -> IO () play area loc = nextWindow <$> new_area >>= print >> (join $ play <$> new_area <*> new_coord) where new_area = (nextArea loc area) <$> getLine new_coord = nextWindow <$> new_area Однако, работает не корректно, первый вызво функции корректен, а потом как-будто getLine работает раз через два

Yuriy
21.10.2018
06:25:59
попробуй рассахарить сначала стандартным способом

Alex
21.10.2018
06:33:48
спасибо, попробую, а случайно нет некаких особенностей с join в IO-монаде? эффекты вложенной монады выполняются?

хотя похоже что да - я пробовал менять getLine на return "some string" и функция ожидамо бесконечно печатала

Google
Dmitry
21.10.2018
06:38:15
putStrLn $ (show new_coord) = print new_coord. Кстати, лучше бы newCoord.

Alex
21.10.2018
06:40:04
да, я вспомнил про print уже когда операторную версию писал

Terminator
21.10.2018
08:52:08
@extlife будет жить. Поприветствуем!

Vasiliy N будет жить. Поприветствуем!

Alexander
21.10.2018
09:49:26
интересно сколько иностранцев банит терминатор

Pineapple
21.10.2018
09:52:21
50%, наверное

Alexander
21.10.2018
09:59:26
50%, наверное
Не забывайте о тех, кто просто не нажимает. Так что ~ 25%

Alexander
21.10.2018
10:07:59
там разве счётчика нету?

типа отвечай у тебя только минута

Dmitry
21.10.2018
10:21:01
Есть

Не все успевают перевести

Наверное

Google
Mikhail
21.10.2018
11:37:40
Народ, подскажите по докеру

FROM haskell:7.10 RUN cabal update # Add .cabal file ADD ./cabal-example.cabal /opt/server/cabal-example.cabal # Docker will cache this command as a layer, freeing us up to # modify source code without re-installing dependencies RUN cd /opt/server && cabal install --only-dependencies -j4 # Add and Install Application Code ADD ./src /opt/server/src ADD ./LICENSE /opt/server/LICENSE RUN cd /opt/server && cabal install # Add installed cabal executables to PATH ENV PATH /root/.cabal/bin:$PATH # Default Command for Container WORKDIR /opt/server/ CMD ["cabal-example"]

Это мой докерфайл.

Контейнер собирается, но

$ docker run -p 3000:3000 cabal-example Unable to find image 'cabal-example:latest' locally

Artyom
21.10.2018
11:42:26
docker build … -t cabal-example

Mikhail
21.10.2018
11:42:48
это все проходит успешно

Artyom
21.10.2018
11:43:23
Я про то, что надо тег поставить

Mikhail
21.10.2018
11:44:04
спасибо)

заработало

Terminator
21.10.2018
12:54:58
@GlazedCurd будет жить. Поприветствуем!

@IvanovPvl будет жить. Поприветствуем!

Mikhail
21.10.2018
15:33:57
Теперь бьюсь с деплоем приложения на heroku

## docker build . -t cabal-example ## docker run -p 80:80 cabal-example ## heroku container:login ## heroku create ## heroku container:push web --app ${YOUR_APP_NAME} ## heroku open --app ${YOUR_APP_NAME}

Все проходит без ошибок, но

в результате вижу типовую их стартовую страницу

А не то, что вижу на localhost

работаю только с 80 портом

Nikita
21.10.2018
16:19:53
на каком порту приложение принимает соединение?

https://devcenter.heroku.com/articles/container-registry-and-runtime#dockerfile-commands-and-runtime

Google
Nikita
21.10.2018
16:20:20
должен быть тот, который установлен в переменной PORT

Mikhail
21.10.2018
16:25:12
добавил в Config vars переменную PORT со значением 80. Не помогает

попробую добавить в Dockerfile EXPOSE 80

Хотя в докере и так работает, проблема в Heroku

Nikita
21.10.2018
16:29:41
нельзя задать значение этой переменной, она передается окружением heroku, ее значение нужно использовать для запуска веб-сервера на нужно порту

Mikhail
21.10.2018
16:35:33
пробую ENV PORT 80 в докерфайл

Nikita
21.10.2018
16:40:13
мда. у тебя должна быть команда задана в докерфайле для запуска приложение, что-то вроде RUN myapp, в самом приложении нужно взять порт из переменной окружения, на нем начать принимать соединения. Вроде бы ничего сложного, можно поискать примеры

не RUN, а CMD только, перепутал

Terminator
21.10.2018
16:48:00
@sushilshik будет жить. Поприветствуем!

Mikhail
21.10.2018
16:48:35
Само приложение там пока хэлловорлд

{-# LANGUAGE OverloadedStrings #-} module Main where import Network.HTTP.Types import Network.Wai import Network.Wai.Handler.Warp (run) app :: Application app _ respond = do putStrLn "I've done some IO here" respond $ responseLBS status200 [("Content-Type", "text/plain")] "Hello, Web!" main :: IO () main = do putStrLn "http://localhost:80/" run 80 app

успешно запускается командой

docker run -p 80:80 cabal-example

на localhost

Nikita
21.10.2018
16:54:14
осталось добавить что-то вроде port <- getEnv "PORT" перед run ... app, а многоточие заменить на каст port к Integer

Mikhail
21.10.2018
17:02:55
cabal-example: PORT: getEnv: does not exist (no environment variable)

хотя возможно это из System.Posix.Env

но вроде нигде в мануалах не упомянуты пляски с бубном и получение порта

Nikita
21.10.2018
17:10:18
1) это не пляски с бубном 2) я выше скинул ссылку на доку 3) сама идея брать порт из переменной окружения все-таки специфична для хероку, это так. Но в этом нет никакой проблемы

Google
Nikita
21.10.2018
17:10:58
теперь нужно будет самому тоже передавать переменную

Mikhail
21.10.2018
17:11:06
так это работает

не работает только в Heroku

Nikita
21.10.2018
17:13:49
нужно проверить как переменную считывать, тут целый чят экспертов, пусть подскажут

Mikhail
21.10.2018
17:17:23
да, возможно heroku перенаправляет с 80 порта на другой, и проблема из-за этого

прошло

{-# LANGUAGE OverloadedStrings #-} module Main where import Network.HTTP.Types import Network.Wai import Network.Wai.Handler.Warp (run) --import Data.Maybe import System.Environment (getEnv) app :: Application app _ respond = do putStrLn "I've done some IO here" respond $ responseLBS status200 [("Content-Type", "text/plain")] "Hello, Web!" main :: IO () main = do port <- read <$> getEnv "PORT" run port app

спасибо за правильную ссылку

Terminator
21.10.2018
19:42:42
Ilya Rusin будет жить. Поприветствуем!

Mikhail
22.10.2018
11:12:12
Люди, вы практикуете TDD? Возникла мысль сделать вебсайт, где есть два вида участников - одни выкладывают запросы на написание pure функций, другие пишут эти функции. Первые делают аплоад файла .cabal и тестов, устанавливают ограничения по количеству строк. Вторые пишут решения, бэкенд прогоняет решения по тестам, проверяет ограничение по количеству строк, в случае успеха тестов моментальная выплата криптой

Идея слишком масштабная чтоб реализовать на коленке. Интересно, востребованно ли оно будет?

Alexander
22.10.2018
11:12:52
type driven development?

Mikhail
22.10.2018
11:13:13
TEST DRIVEN DEV-T

Artyom
22.10.2018
11:13:55
:vanga: Твой сайт будут в основном использовать для домашних заданий, потому что он идеально для этого подходит (тесты уже даны)

Alexander
22.10.2018
11:15:06
я не очень вижу большого смысла в сервисе в такой постановке

Artyom
22.10.2018
11:15:08
А бизнес его использовать не будет, потому что если даже мне надо написать парсер регекспов для проекта, я его не буду просить сделать на сайте, где основной контингент -- нерадивые студенты

Alexander
22.10.2018
11:15:22
взлететь может если убрать чистоту и иметь DSL для написания интеграционных тестов

Google
Mikhail
22.10.2018
11:15:23

Страница 1538 из 1551