2017-10-23 30 views
1

外部Gitリポジトリ(Bitbucket)を使用してAzure WebサービスにDjangoアプリケーション(正確にはwagtail)を配備することに課題があります。私は、Python 3.6.1を使用したいので、私は私のpython 3.6.1拡張機能をインストールし、所定の位置に持ってazureアプリケーションサービスでPython 3.6を使用 - 拡張機能としてインストールされているにもかかわらず動作しません

  • Managing Python on Azure App Service manualで指示に従っ
  • 私は私のアプリのルートディレクトリにあるweb.configファイルを作成し
  • (私がチェックそして、それがサーバーにアップロードされる)

しかし、展開がメッセージで失敗し

Detecting Python runtime from runtime.txt 
Unsupported runtime: python-3.6.1 

Supported runtime values are: 
python-2.7 
python-3.4 
An error has occurred during web site deployment. 
\r\nD:\Program Files (x86)\SiteExtensions\Kudu\66.61008.3066\bin\Scripts\starter.cmd "D:\home\site\deployments\tools\deploy.cmd" 

私のweb.configファイルは

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/> 
    <!-- Django apps only --> 
    <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/> 
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/> 
    </appSettings> 
    <system.webServer> 
    <handlers> 
     <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" 
      scriptProcessor="D:\home\python361x64\python.exe|D:\home\python361x64\wfastcgi.py" 
      resourceType="Unspecified" requireAccess="Script"/> 
    </handlers> 
    </system.webServer> 
</configuration> 

パスは以下のクーズーコンソールからlsで、OKです

D:\home\python361x64>ls 
DLLs 
Lib 
Scripts 
__pycache__ 
python.exe 
python3.dll 
python36.dll 
pythonw.exe 
sitecustomize.py 
vcruntime140.dll 
wfastcgi.py 

それは考慮に私は「私が持っているweb.configファイル、またはPythonのバージョンを取っていない展開プロセスのように見えます拡張機能経由でインストールされたものは表示されません。

問題の可能性がある箇所を教えてください。

敬具、
コンラート

+1

よく知りたい建物のDockerの画像ですか?独自のビルド( 'python:3.6.3-jessie'からインポート)を行い、LinuxワーカーのApp Serviceにデプロイします。 15分で完了します - https://docs.microsoft.com/en-us/azure/app-service/containers/tutorial-custom-docker-image – evilSnobu

+0

あなたの発言をありがとう。残念なことに私はDockerに熱心ではないので、今のところ、私はそれを使わずに済むことに決めました(私は実際に問題を解決し、アプリケーションを配備しました)。しかし、将来的にはDockerをもっとよく知っておく必要があります(既に提供されているコンテナのみを使用しました)) – Calfy

答えて

3

は戦いの数時間後、私は最終的に予想されるように、この野郎を実行するために管理。

  1. runtime.txtルートフォルダにあるファイルが最初の問題でした。 Pythonの3.6バージョンが拡張機能を介してインストールされているので、実際には、このv。が存在することはありません(2.7と3.4のみが分かっています)。最初のステップはこのファイルを取り除くことでした。
  2. runtime.txtが削除された場合、展開プロセスはpython 3.4を使用していて、requirements.txtファイルの依存関係の1つにインストールに失敗しています(これはおそらく古いバージョンのPythonのためです)。そこで、次のステップでは、.skipPythonDeploymentを追加して、要件の自動インストールを避け、kudu consoleで手動でインストールしました。私たちのpython env(私の場合はD:\home\python361x64)のフォルダに次のコマンドが起動されました。
    python.exe -m pip install --upgrade -r D:\home\site\wwwroot\requirements.txt
    すべての依存関係が正しくインストールされています。

  3. デプロイ後、ウェブブラウザでアプリを起動すると、メッセージThe page cannot be displayed because an internal server error has occurred.が表示されました。次のステップは、問題の詳細情報を収集することでしたので、私はweb.configファイルにいくつかの新しい行を追加しました:

    .... 
    <system.webServer> 
    .... 
        <httpErrors errorMode="Detailed"></httpErrors> 
    </system.webServer> 
    <system.web> 
        .... 
        <customErrors mode="Off" /> 
    </system.web> 
    

    おかげでそれに、私が問題を引き起こしているかどうか確認することができました。私の場合、WSGI_HANDLERの値はweb.configです。私はセキレイのために、それは<app_name>.wsgi.applicationだったし、それが仕事を始めた(正しい値に設定します。

あなたのすべてのあなたのサポートのためのみんなに感謝します。

+0

ありがとうございます。それは私のための良いリファレンスです。良い一日を! –

+0

あなたはあなたが言ったことはありませんでしたwhatsは、ハンドラの正しいパス – luky

3

私はあなたの問題を再現しようとしましたが、failed.Iは紺碧に自分のdjango web appを展開しようとしましたが、それが動作します。

私の手順を参照して、何かを見逃していないかどうかを確認できます。

ステップ1:あなたの紺碧のWebアプリケーションを作成するためにofficial tutorialに従ってください。

手順2: Python拡張機能を追加します。

enter image description here

ステップ3:web.configファイルを追加し、Webアプリケーションを配備します。

<configuration> 
    <appSettings> 
    <add key="WSGI_HANDLER" value="<your project name>.wsgi.application"/> 
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/> 
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/> 
    </appSettings> 
    <system.webServer> 
    <handlers> 
     <add name="PythonHandler" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\python361x64\python.exe|D:\home\python361x64\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/> 
    </handlers> 
    <rewrite> 
     <rules> 
     <rule name="Static Files" stopProcessing="true"> 
      <conditions> 
      <add input="true" pattern="false" /> 
      </conditions> 
     </rule> 
     <rule name="Configure Python" stopProcessing="true"> 
      <match url="(.*)" ignoreCase="false" /> 
      <conditions> 
      <add input="{REQUEST_URI}" pattern="^/static/.*" ignoreCase="true" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 

ステップ4:あなたpython extension environmentpip pluginをインストールします。

ステップ5:djangoモジュールと、使用したい他のモジュールをインストールします。

あなたが参照できるいくつかの同様のSOスレッドがあります。

  1. Only getting Your App Service app has been created - after deploying to azure
  2. Django web app deploy in Azure via Visual Studio 2017

それはあなたのお役に立てば幸いです。

おかげで、このチュートリアルで一歩一歩を行くように、あなたの入力のための@Jay功は私に物事のカップルを示した);

0

私はCalfy応答の足りない部分を掲示しています。

<add key="WSGI_ALT_VIRTUALENV_HANDLER" value="app.wsgi_app" /> 
<add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="D:\home\python361x64\python.exe" /> 
<add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.get_venv_handler()"/> 

app.wsgi_appは実際にはあなたのフォルダ内にapp.pyと私は理解していますが、通常のpython appではなくwsgiアプリでなければなりません。(私はここでもcherrypy modを使っています)このサンプルアプリケーションはインターネットのどこかにコピーされています。

import sys 
import cherrypy 

class Hello(object): 
    @cherrypy.expose 
    @cherrypy.tools.response_headers(headers=[('Content-Type', 'text/plain')]) 
    def index(self): 
     message = """\ 
Hello Azure! 
Python: {python_version} 
CherryPy: {cherrypy_version} 

More info: http://blog.cincura.net/id/233498 
""" 
     return message.format(python_version=sys.version, cherrypy_version=cherrypy.__version__) 


wsgi_app = cherrypy.Application(Hello(), '/') 

if __name__ == '__main__': 
    from wsgiref.simple_server import make_server 

    httpd = make_server('', 6600, wsgi_app) 
    httpd.serve_forever()