5

関連する質問をしたところ、正しい質問をしていないことに気付きました (つまり、これは git に関するものではありません)。

問題は、最初に R を使用してクラウドでプロジェクトを作成せずに、プロジェクトを github にプッシュする方法です。現在、この質問の情報を使用して、RStudio の git コマンド ラインからこれを実行できます。

今、私はそれを Windows マシンから R コードにしようとしています (Linux は簡単でした)。systemR呼び出しを介してコマンド ラインから curl を使用する最初のステップで立ち往生しています。私が持っているものとエラーメッセージを表示します (ここまで私を導いてくれた SimonO101 に感謝します)。以下の彼のコメントに従って、問題をそのまま反映するために大幅に編集しました。

R コード:

repo <- "New"
user <- "trinker"
password <- "password"

url <- "http://curl.askapache.com/download/curl-7.23.1-win64-ssl-sspi.zip"
tmp <- tempfile( fileext = ".zip" )
download.file(url,tmp)
unzip(tmp, exdir = tempdir())

system(paste0(tempdir(), "/curl http://curl.haxx.se/ca/cacert.pem -o " , 
    tempdir() , "/curl-ca-bundle.crt"))

cmd1 <- paste0(tempdir(), "/curl -u '", user, ":", password, 
    "' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'")

system(cmd1)

cmd2 <- paste0(tempdir(), "/curl -k -u '", user, ":", password, 
    "' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'")

system(cmd2)

エラー メッセージ (両方のアプローチで同じ):

> system(cmd1)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    12    0     0  100    12      0     24 --:--:-- --:--:-- --:--:--    30
100    47  100    35  100    12     65     22 --:--:-- --:--:-- --:--:--    83{
  "message": "Bad credentials"
}

次の理由により、すべてのファイルがそこにあることを知っています。

> dir(tempdir())
[1] "curl-ca-bundle.crt"   "curl.exe"             "file1aec62fa980.zip"  "file1aec758c1415.zip"

これは Linux Mint で動作するため、私のパスワードまたはユーザー名ではありません (唯一の違いは curl の前の部分です)。

repo <- "New"
user <- "trinker"
password <- "password"


cmd1 <- paste0("curl -u '", user, ":", password, 
    "' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'")

system(cmd1)

注: Windows 7 マシン。R 2.14.1

4

1 に答える 1

4

編集 - OPが報奨金を提供した後

わかりました、それは、コマンド ラインでエスケープするクレイジーな Windows の文字に関係していることがわかりました。基本的に問題は、不適切な形式の json リクエストを github に渡していたことです。

を使用shQuoteして、Windows の curl 要求の問題のある部分を適切にフォーマットできます。プラットフォーム タイプをテストして、次のような Windows の場合に特別な書式を含める必要があるかどうかを確認できます。

repo <- "NewRepository"
json <- paste0(" { \"name\":\"" , repo , "\" } ") #string we desire formatting
os <- .Platform$OS.type #check if we are on Windows
if( os == "windows" ){
json <- shQuote(json , type = "cmd" )
cmd1 <- paste0( tempdir() ,"/curl -i -u \"" , user , ":" , password , "\" https://api.github.com/user/repos -d " , json )
}

これは、Windows 7 ボックスで問題なく動作しました。必要に応じて GitHub スクリプトを更新できますか?

古い答え

ここここでいくつか掘り下げましたが、問題の解決策はcurl-ca-bundleを更新することかもしれません. R に Internet2.dll を使用させると、Windows で役立つ場合があります

repo <- "New"
user <- "trinker"
password <- "password"

url <- "http://curl.askapache.com/download/curl-7.23.1-win64-ssl-sspi.zip"
tmp <- tempfile( fileext = ".zip" )
download.file(url,tmp)
unzip(tmp, exdir = tempdir())
system( paste0( "curl http://curl.haxx.se/ca/cacert.pem -o " , tempdir() , "/curl-ca-bundle.crt" ) )
system( paste0( tempdir(),"/curl", " -u \'USER:PASS\' https://api.github.com/user/repos -d \'{\"name\":\"REPO\"}\'") )

繰り返しますが、私は自分の Windows ボックスにアクセスできないため、これをテストすることはできませんが、認証局ファイルを更新することで、他の何人かの人々が助けられたようです。curl の Web サイトから、Windows バージョンの curl はcurl-ca-bundle.crt次の順序でファイルを検索する必要があります。

  1. アプリケーションのディレクトリ
  2. 現在の作業ディレクトリ
  3. Windows システム ディレクトリ (例: C:\windows\system32)
  4. Windows ディレクトリ (例: C:\windows)
  5. %PATH% に沿ったすべてのディレクトリ
于 2013-02-23T23:37:19.330 に答える