Задача запуска облачной службы Azure не выполняется

Я пытаюсь развернуть веб-роль облачной службы Azure, простое приложение для тестирования подключения к Hive через odbc. Для этого мне нужно установить драйвер odbc hive на машину перед запуском приложения, поэтому я добавил задачу запуска, которая вызывает скрипт powershell для загрузки драйвера, а затем устанавливает его следующим образом:

запуск.cmd

@echo off
powershell -command "Set-ExecutionPolicy Unrestricted" 2>> err.out  
powershell .\dlHiveOdbcDriver.ps1 2>> err.out
hiveodbc.msi /passive

dlHiveOdbcDriver.ps1

(new-object system.net.webclient).downloadfile('https://download.microsoft.com/download/F/4/A/F4A2CA7D-5D14-4177-A7CE-B938EF3F3C24/HiveODBC32.msi', 'hiveodbc.msi')

Мой serviceDefinition имеет следующий код для объявления задачи запуска

<WebRole name="SomeTest" vmsize="ExtraSmall">
    <Startup>
      <Task commandLine="startup.cmd" taskType="simple" executionContext="elevated" />
    </Startup>
...
</WebRole>

Однако, когда я развертываю приложение, я все еще получаю следующую ошибку

[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

что намекает на то, что драйвер не был установлен. Я попытался перезапустить приложение, убедившись, что все пререквизиты (скрипты в корневой папке, всегда копировать, executePolicy и т. д.) были применены, но безрезультатно. К сожалению, в настоящее время я не могу удаленно подключиться к машине из-за проблем с офисом...

Любая помощь будет высоко ценится.


person nieve    schedule 02.12.2015    source источник


Ответы (2)


Это действительно помогает иметь удаленный доступ для устранения неполадок. Я предлагаю попробовать это с ПК, где вы действительно можете проверить.

Но вот мой подход. В ServiceDefinition.csdef у меня есть следующее:

  <Task commandLine=".\startuptasks\bootstrap.cmd" executionContext="elevated" taskType="simple">
  </Task>

Я использую этот скрипт bootstrap.cmd для установки сторонних компонентов:

ECHO The current version is %MyVersionNumber% >> ".\StartupLog.txt" 2>&1

cd startuptasks

PowerShell  -Command "Set-Executionpolicy Unrestricted" >> ".\excutionploicylog.txt" 2>&1
PowerShell  .\installCCP.ps1  >> ".\CCPStartupLog.txt" 2>&1
PowerShell  .\installOTHERSTUFF.ps1  >> ".\GSStartupLog.txt" 2>&1
EXIT /B 0

Содержимое файла install*.ps1:

$source = "http://YOUR_ACCOUNT.blob.core.windows.net/installer/vcredist_x64.exe"
$destination = "$($tempDir.Value)\vredistx64.exe"
Invoke-WebRequest $source -OutFile $destination  -Method Get
$p1 = Start-Process $destination -ArgumentList " /quiet /norestart" -wait -NoNewWindow -PassThru

Убедитесь, что все файлы (.cmd и .ps1) скопированы в выходной каталог с помощью «Копировать, если новее».

Убедитесь, что вы можете установить локально с помощью Start-Process. Тихая установка должна поддерживаться.

Пожалуйста, дайте мне знать, если это поможет.

person henrikwh    schedule 21.12.2015

Чуть не забыл обновить. Оказывается, Azure по умолчанию использует архитектуру x64 для веб-сайтов IIS, которые они размещают на своих виртуальных машинах в своих веб-ролях облачной службы. Кроме того, у них также предварительно установлен драйвер Hive odbc, однако они использовали драйвер x86, а не x64. Я также пытался установить драйвер x86, поэтому задача работала так, как должна была. Я поднял проблему с Azure, чтобы исправить это, если кто-то тоже пострадал от этой проблемы.

person nieve    schedule 22.12.2015