Я борюсь с написанием сценария, который каким-то образом очистил бы https://www.rstudio.com/products/rstudio/download/ для номера последней версии RStudio, скачал и установил его.

Поскольку я программист на R, я начал писать скрипт на R, используя пакет rvest. Мне удалось очистить ссылку для загрузки сервера RStudio, но я все еще не могу получить сам RStudio.

Вот код R для получения ссылки на скачивание 64-битного RStudio-сервера для Ubuntu.

if(!require('stringr')) install.packages('stringr', Ncpus=8, repos='http://cran.us.r-project.org')
if(!require('rvest')) install.packages('rvest', Ncpus=8, repos='http://cran.us.r-project.org')

xpath<-'//code[(((count(preceding-sibling::*) + 1) = 3) and parent::*)]'
url<-'https://www.rstudio.com/products/rstudio/download-server/'
thepage<-xml2::read_html(url)
the_links_html <- rvest::html_nodes(thepage,xpath=xpath)
the_links <- rvest::html_text(the_links_html)
the_link <- the_links[stringr::str_detect(the_links, '-amd64\\\\.deb')]
the_r_uri<-stringr::str_match(the_link, 'https://.*$')
cat(the_r_uri)

К сожалению, страница загрузки рабочего стола RStudio имеет совершенно другую структуру, и я не использую этот подход.

Может кто-то помочь мне с этим? Я не могу поверить, что все ученые в мире вручную обновляют свой RStudio!


Существует еще более простая версия скрипта, которая читает версию RStudio-сервера. Bash версия:

RSTUDIO_LATEST=$(wget --no-check-certificate -qO- https://s3.amazonaws.com/rstudio-server/current.ver)

Или R версия:

scan('https://s3.amazonaws.com/rstudio-server/current.ver', what = character(0))

Но версия RStudio-desktop все еще ускользает от меня.

4
Adam Ryczkowski 3 Сен 2017 в 14:33

4 ответа

Лучший ответ

Если вы запросите RStudio check_for_update со строкой версии, вы получите версию обновления и URL-адрес, где ее получить:

https://www.rstudio.org/links/check_for_update?version=1.0.0

Обновление - версия = 1.0.153 и обновление - URL = HTTPS % 3A% 2F % 2Fwww.rstudio.com % 2Fproducts % 2Frstudio % 2Fdownload % 2F & обновление - сообщение = RStudio % 201.0.153 % 20is % 20now % 20available % 20% 28you % 27re % 20using % 201.0.0 % 29 и обновление срочных = 0

Глянь сюда:

https://github.com/rstudio/rstudio/blob/54cd3abcfc58837b433464c793fe9b03a87f0bb4/src/cpp/session/modules/SessionUpdates.R

Если вы действительно хотите удалить его со страницы загрузки, я получу href из <a> в первом <td> из первого <table> класса «загрузок» и затем проанализируйте три числа, разделенных точками, между «RStudio-» и «.exe». Версии RStudio доступны для всех платформ, поэтому их достаточно загрузить из Windows.

> url = "https://www.rstudio.com/products/rstudio/download/"
> thepage<-xml2::read_html(url)
> html_node(thepage, ".downloads td a") %>% html_attr("href")
[1] "https://download1.rstudio.org/RStudio-1.0.153.exe"
2
Spacedman 4 Сен 2017 в 11:24

Похоже, что последний стабильный номер версии можно получить по ссылке http://download1.rstudio.org/ current.ver и он более актуален (по неизвестной причине), по крайней мере, на момент написания этого ответа.

$ curl -s http://download1.rstudio.org/current.ver 1.1.447

$ curl -s https://www.rstudio.org/links/check_for_update?version=1.0.0 | grep -oEi 'update-version=([0-9]+\.[0-9]+\.[0-9]+)' | awk -F= '{print $2}' 1.1.423

Обнаружил, что здесь: https: // github.com/yutannihilation/ansible-playbook-r/blob/master/tasks/install-rstudio-server.yml

3
Vangelis Tasoulas 5 Май 2018 в 22:59

Если кому-то интересно, вот мой последний скрипт обновления RServer-desktop-on-Ubuntu. Он устанавливает 64-битный RStudio-desktop, а затем, если шрифт Fira Console доступен, применяет исправление из https://github.com/tonsky/FiraCode/wiki/RStudio-instructions для RStudio, поэтому лигатуры начинают работать.

#!/bin/bash
if dpkg -s rstudio >/dev/null 2>/dev/null; then
    ver=$(apt show rstudio | grep Version)
    pattern='^Version: ([0-9.]+)\s*$'
    if [[ $ver =~ $pattern ]]; then
        ourversion=${BASH_REMATCH[1]}
        netversion=$(Rscript -e 'cat(stringr::str_match(scan("https://www.rstudio.org/links/check_for_update?version=1.0.0", what = character(0), quiet=TRUE), "^[^=]+=([^\\&]+)\\&.*")[[2]])')
        if [[ $ourversion != $netversion ]]; then
            RSTUDIO_URI=$(Rscript /tmp/get_rstudio_uri.R)
        fi
        tee /tmp/get_rstudio_uri.R <<EOF
if(!require('rvest')) install.packages('rvest', repos='http://cran.us.r-project.org')
xpath='.downloads:nth-child(2) tr:nth-child(5) a'
url = "https://www.rstudio.com/products/rstudio/download/"
thepage<-xml2::read_html(url)
cat(html_node(thepage, xpath) %>% html_attr("href"))
EOF
        RSTUDIO_URI=$(Rscript /tmp/get_rstudio_uri.R)

        wget -c --output-document /tmp/rstudio.deb $RSTUDIO_URI 
        sudo dpkg -i /tmp/rstudio.deb
        rm /tmp/rstudio.deb
        rm /tmp/get_rstudio_uri.R

        if fc-list |grep -q FiraCode; then
            if !grep -q "text-rendering:" /usr/lib/rstudio/www/index.htm; then
                sudo sed -i '/<head>/a<style>*{text-rendering: optimizeLegibility;}<\/style>' /usr/lib/rstudio/www/index.htm
            fi
        fi
    fi
fi
0
Adam Ryczkowski 4 Сен 2017 в 13:29

Здесь есть почти решение:

https://hub.docker.com/r/rocker/rstudio-daily/~/dockerfile/

В этом скрипте, который используется для последних сборок:

https://raw.githubusercontent.com/rocker-org/rstudio-daily/master/latest.R

Вы захотите изменить этот сценарий, чтобы он был более строгим в отношении того, что он принимает, то есть я бы хотел этот rstudio-server-1.1.355-amd64.deb, а не stretch вариант.

(Но в любом случае вы можете изменить его, чтобы он соответствовал тому типу сборки, который вам нужен, это ежедневные сборки, RStudio Server для Ubuntu.)

1
mdsumner 3 Сен 2017 в 12:33