0

Ich möchte einige SQL-Integrationstests in meinem R-Paket auf Appveyor ausführen. Ich benutze eine MDF-Datei, um die Datenbank von Interesse einzurichten, aber ich sehe Probleme mit einer MDF-Datei in meinem R-Paket. Hier sind die relevanten Schritte:R-Paket SQL-Integrationstests auf Appveyor einrichten

1) Vor der Erstellung, rufen Sie ein PowerShell-Skript auf, um die Datenbank mit der MDF-Datei in meinem Paket zu erstellen.

  • Dieser Schritt erfolgt ohne Fehler

2) Die yml Datei läuft R Tests über travis-tool.sh run_tests und versucht, die R-Projektdateien von c:\projects\HCRTools auf das Build-Verzeichnis zu kopieren, das heißt C:\Users\appveyor\AppData\Local\Temp

  • Dieser Schritt schlägt fehl, da das MDF jetzt an SQL Server gebunden ist und nicht kopiert werden kann:

    "Warnung in file.copy (pkgname, Tdir, rekursiv = TRUE): Problem beim Kopieren. \ Hcrtools \ inst \ CIDatabase \ SAM_log.ldf in C: \ Benutzer \ appveyor \ AppData \ Local \ Temp \ 1 \ RtmpCq659a \ Rbuild92c6989d34 \ hcrtools \ inst \ CIDatabase \ SAM_log.ldf: Zugriff verweigert ERROR Kopieren zu bauen Verzeichnis „failed

sehr jede mögliche Hilfe schätzen würde die MDF- Artefakt in das Hochladen, ohne es auch in der R-Paket zu sein! Konnte das nicht funktionieren lassen.

yml Datei:

init: 
    ps: | 
     $ErrorActionPreference = "Stop" 
     Invoke-WebRequest http://raw.github.com/krlmlr/r-appveyor/master/scripts/appveyor-tool.ps1 -OutFile "..\appveyor-tool.ps1" 
     Import-Module '..\appveyor-tool.ps1' 
install: 
    ps: Bootstrap 

services: 
    - mssql2012sp1 

build_script: 
    - ps: iex .\inst\CIDatabase\CIBuild_DBCreate.ps1 #<-- Create DB (w/ no error)! 
    - Rscript -e "source('http://bioconductor.org/biocLite.R')" -e "chooseCRANmirror(ind=81)" 
    - travis-tool.sh install_deps 

test_script: 
    - travis-tool.sh run_tests #<-- mdf copy error occurs! 

on_failure: 
    - 7z a failure.zip *.Rcheck\* 
    - appveyor PushArtifact failure.zip 

environment: 
    global: 
    WARNINGS_ARE_ERRORS: 0 
    _R_CHECK_FORCE_SUGGESTS_: 1 
    R_ARCH: x64 

    matrix: 
    - R_VERSION: release 

Powershell-Datei Artefakte laden und erstellen Datenbank:

#-- Push artifacts up 
Push-AppveyorArtifact inst/CIDatabase/SAM.mdf 
Push-AppveyorArtifact inst/CIDatabase/SAM_log.ldf 

#-- Use mdf/ldf to create SAM db 
$mdfFile = "c:\projects\HCRTools\inst\CIDatabase\SAM.mdf" 
$ldfFile = "c:\projects\HCRTools\inst\CIDatabase\SAM_log.ldf" 

sqlcmd -S "(local)\SQL2012SP1" -Q "CREATE DATABASE [SAM] ON (FILENAME = '$mdfFile'), (FILENAME = '$ldfFile') for ATTACH" 

Hinweis: hat appveyor Beispiel https://github.com/hadley/devtools als R-Paket im Einsatz. Danke für jede Richtung!

Antwort

1

Ich habe Ihr Repository geklont und konnte dieses Problem beheben, indem Sie SQL Server vor dem Fehlschlagen des Befehls stoppen und danach starten. Es sieht in travis-tool.sh innerhalb der RunTests() -Funktion so aus.

net stop “SQL Server (SQL2012SP1)” R CMD build ${R_BUILD_ARGS} . net start “SQL Server (SQL2012SP1)”

Dies trug dazu bei Datei kopieren Problem zu vermeiden. Allerdings weiß ich wirklich nicht, ob SQL Server im laufenden Zustand für diesen fehlgeschlagenen Schritt erforderlich ist oder nicht. Oder vielleicht ist SQL Server überhaupt nicht für Tests erforderlich und kann vor einem Test außerhalb von travis-tool.sh gestoppt werden.

In jedem Fall hoffe ich, dass dies eine Vorstellung davon geben kann, was Sie tun können.

--ilya.