#r #ubuntu #ftp #google-cloud-platform #rstudio-server
#r #ubuntu #ftp #google-облачная платформа #rstudio-сервер
Вопрос:
все
Я запускаю сервер RStudio на виртуальной машине Google Cloud с Ubuntu 14.04 (см. Полное sessionInfo
в конце). Я пытаюсь загрузить несколько файлов с ftp-сервера, и первым шагом является перечисление подкаталогов на сервере, для которых я использую RCurl
пакет:
library(RCurl)
getFiles <- function(dirs) {
urls <- paste(dirs, "/", sep="")
fls <- strsplit(getURL(urls, dirlistonly=TRUE), "r?n")
ok <- sapply(fls, length) > 0
unlist(mapply(paste, urls[ok], fls[ok], sep="", SIMPLIFY=FALSE),
use.names=FALSE)
}
dirs <- "ftp://ftp.mtps.gov.br/pdet/microdados/RAIS"
folders <- getFiles(dirs)
Однако я получаю следующую ошибку:
Error in function (type, msg, asError = TRUE) :
Failed to connect to ftp.mtps.gov.br port 21: Connection timed out
Я запустил тот же код локально, на своем компьютере с Windows, и все прошло отлично.
По-видимому, виртуальная машина не может установить соединение с ftp-сервером по какой-то причине, связанной с Linux (я провел некоторое исследование, и некоторые люди используют getBinaryURL
вместо getURL
, но я не смог понять, как применить это к моему коду …) Может кто-нибудь дать мне свет?
Вот подробная sessionInfo
информация с виртуальной машины:
R version 3.3.0 beta (2016-03-30 r70404)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.4 LTS
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8
[4] LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
Комментарии:
1. вы проверяли, нужно ли использовать pasv ftp вместо «active»?
2. Привет, @MarcB. Извините, не могли бы вы уточнить это немного подробнее, пожалуйста? У меня нет большого опыта работы с машинами Linux…
3. это протокол ftp. стандартный ftp имеет соединения клиент-> сервер для отправки команд, но для получения данных сервер-> клиент требуется, чтобы сервер подключался к клиенту, что во многих случаях невозможно, поэтому есть «PASV» ftp, который имеет только соединения клиент-> сервер.
4. @MarcB, я попытался использовать команду
quote PASV
, чтобы проверить, является ли соединение пассивным, но команда ничего не вернет, поскольку соединение даже не было установлено…5. Если вы работаете в Google Cloud, не имеет значения, кто является спонсором. Неразумные списки блоков — это неразумные списки блоков.