2017-01-23 11 views
0

私のウェブサイトの要約:ユーザーは「送信」を押すとAJAX経由でバックエンドに情報が提出されます。バックエンドは情報を受信すると、情報を使用してDOCXを生成し、そのDOCXファイルをユーザに返します。ここでPythonAnywhere複数の「Webワーカー」またはプロセスを処理する方法

は私のAJAXコードが

$.ajax({ 
     type:'POST', 
     url:'/submit/', 
     data:{ 
      data that I submit 
     }, 
     dateType: 'json', 
     success:function() { 
      document.location = "/submit"; 

     } 
    }) 

私のHTMLファイルであるマイビューは/これは今いつかのために完璧に働いているファイル

def submit(request): 

    #Receive Data 
    #Create a File with the Data and save it to the server 

    return send_file(request) 

def send_file(request): 

    lastName = get_last_name() +'.docx' 
    filename = get_full_path() # Select your file here.         
    wrapper = FileWrapper(open(filename , 'rb')) 
    response = HttpResponse(wrapper, content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document') 
    response['Content-Disposition'] = 'attachment; filename=' + lastName 
    response['Content-Length'] = os.path.getsize(filename) 

    return response 

を返すためにsend_fileを使用する/提出するための機能します。しかし、ホスティングアカウントで「Webワーカー」/プロセスの量を1から4に増やしたときに問題が発生しました。何が起きているのかは、別のWebワーカーがファイルを送信するために使用されていることです。これは、サイトの新しいインスタンスを作成することです。その問題は、新しいインスタンスに、ファイルを作成するWebワーカーで作成されたファイルパスが含まれていないことです。

私が言ったように、これは完璧に働いていました。私のWebAppには1人の「Webワーカー」または1つのプロセスしかなかったときでした。今私は約50%の成功率しか持っていません。

これは、プロセスが作成される前にファイルを送信しようとしているようなものです。または、プロセスは、それを作成したプロセスが行うファイル名にアクセスできません。

ご協力いただければ幸いです。ありがとう!

コードpath_nameを要求してからサーバーに戻そうとしています。

送信返信するファイル情報をajaxに戻して表示します。 AJAX

success:function(fileInfo) { 
     name_last = fileInfo['lastname'] 
     filepath= fileInfo['filepath'] 
     document.location = "/send"; 
    } 

def submit(request): 
    # Receive DATA 
    # Generate file with data 

    lastName = get_last_name() +'.docx' 
    filename = get_full_path() # Select your file here. 


    return HttpResponse(json.dumps({'lastname': lastName,'filename':filename}), content_type="application/json") 

成功機能は、だから私はFILEINFOは、 "/送信" を送信するために得ることができますか?

+0

デバッグに必要なget_full_path()を追加してください。 – Fian

答えて

1

各ウェブワーカーは別々のプロセスです。他のワーカーに設定されている変数にはアクセスできません。各リクエストはどのワーカーにも渡すことができるので、特定のユーザーに設定されたファイル名を使用する保証はありません。リクエスト間で情報を転送する必要がある場合は、ワーカーのメモリの外に保存する必要があります。クッキーやデータベース、またはファイルで行うことができます。

+0

さて、どうやってやるの?私は働いていた提出リターンを通してfile_pathを送信しようとしました。しかし、成功関数がファイルパスを返す方法を理解できませんでした。それは理にかなっていますか?上記の一番下にあるコードを追加しました。ご協力いただきありがとうございます! –

+0

気にしない、私はそれが働いた!私は、ファイルパスを保持するためにクッキーを使用しました。ご協力いただきありがとうございます –

関連する問題