Я пытаюсь запустить news.arc на Redhat Openshift. (Картридж DIY с использованием инструкций Raycine для запуска ракетки)
Вот шаги, которые я выполнил
Запустите самодельный картридж, следуя инструкциям Raycine отсюда — https://github.com/RayRacine/rackos/wiki/Quick-Start
Получите файл news.arc от anarki отсюда https://github.com/arclanguage/anarki/.
При развертывании кода ракетка устанавливается, однако я не знаю, как передать аргументы подсказки дуги. Итак, я подключаюсь по ssh к серверу openshift и делаю следующее
$racket -f as.scm
arc>(load "lib/news.arc")
arc>(nsv)
Error: "tcp-listen: listen failed\n port number: 8080\n system error: Permission denied; errno=13"
Я нашел эту тему - http://arclanguage.com/item?id=7731, в которой аналогичная ошибка.
Openshift позволяет использовать порт 8080, который использует news.arc по умолчанию. Однако Openshift требует использования их внутреннего IP-адреса ($OPENSHIFT_DIY_IP).
Я попытался найти способ указать ip для tcp-listen. (Документация Racket по tcp-listen находится здесь — http://docs.racket-lang.org/reference/tcp.html)
Вот несколько соответствующих строк из ac.scm (https://github.com/arclanguage/anarki/blob/master/ac.scm)
(xdef open-socket (lambda (num) (tcp-listen num 50 #t)))
(xdef socket-connect (lambda (host port)
(ar-init-socket
(lambda () (tcp-connect host port)))))
(xdef ssl-connect (lambda (host port)
(ar-init-socket
(lambda () (ssl-connect host port)))))
В lang.arc есть эти строки, однако я сомневаюсь, что lib/lang.arc вызывается при загрузке news.arc (я пытался заменить ip на значение $OPENSHIFT_DIY_IP, но результат тот же)
reactor.connectTCP("localhost", «lang-control-port», ControlClientFactory())
reactor.listenTCP(«lang-listen-port!python», site, interface='127.0.0.1')
В news.arc есть эти строки, где упоминается порт 8080
(def nsv ((o port 8080))
(map ensure-dir (list arcdir* newsdir* storydir* votedir* profdir*))
(unless stories* (load-items))
(if (and initload-users* (empty profs*)) (load-users))
(asv port))
В ссылке Racket TCP упоминается использование имени хоста.
(tcp-connect hostname
port-no
[ local-hostname
local-port-no]) →
input-port? output-port?
hostname : string?
port-no : (integer-in 1 65535)
local-hostname : (or/c string? #f) = #f
local-port-no : (or/c (integer-in 1 65535) #f) = #f
Может ли кто-нибудь предложить решение? Как указать имя хоста для tcp-listen в файле news.arc?
(Начинающий с Arc/Racket. Я уверен, что задаю здесь неправильный вопрос и, должно быть, делаю что-то не так. Спрашиваю, чтобы мне стало немного понятнее)
(news.arc — cms/forum, который используется arclanguage.com/ и news.ycombinator.com)