2016-08-11 14 views
1

workersに関するHerokuのドキュメントに従っていますが、成功しませんでした。バックグラウンドジョブとして実行されるモジュールutil.pyがあります:Herokuワーカーは動作しません

util.py:

import requests 

def count_words_at_url(url): 
    resp = requests.get(url) 
    return len(resp.text.split()) 

そして労働者のキューにutils.pyを置く:

from utils import count_words_at_url 
from rq import Queue 
from worker import conn 

q = Queue(connection=conn) 
result = q.enqueue(count_words_at_url, 'http://heroku.com') 

Question1:I q.enqueue(...)の仕組みを知りたいですか?私は、最初の引数は(count_words_at_urlは、関数名と第二引数(「http://heroku.com」です)count_words_at_url関数の引数として使用されることを想定。

私が正しいだ場合は、なぜなぜいけないのでしょうか?resp = requests.get(url)その引数を取得する必要がありますただreturn len(url.split())

EDIT:?

質問2:大きなファイルを(Herokuのは、常にタイムアウトにより、このような要求を終了)をアップロードすることができるようにするために、私はその意志の機能にHTTPリクエストを渡したいですバックグラウンドジョブとして実行する:

urls.py

urlpatterns = [ 
    url(r'upload/', views.upload), 
] 

views.py

def upload(request): 
    if request.method=='GET': 
     return render(request, 'upload/upload.html') 
    # POST 
    q = Queue(connection=conn) 
    q.enqueue(uploadFile, request) 
    return render(request, 'upload/upload.html') 

def uploadFile(request): 
    # Upload files to Google Storage 
    fileToUpload = request.FILES.get('fileToUpload') 
    cloudFilename = 'uploads/' + fileToUpload.name 
    conn = boto.connect_gs(gs_access_key_id=GS_ACCESS_KEY, 
          gs_secret_access_key=GS_SECRET_KEY) 
    bucket = conn.get_bucket(GS_BUCKET_NAME) 
    fpic = boto.gs.key.Key(bucket) 
    fpic.key = cloudFilename 
    # Public read: 
    fpic.set_contents_from_file(fileToUpload, policy='public-read') 

upload.htmlCannot serialize socket object 私はフォークプロセスにソケットオブジェクトを渡すことはできませんことを回し:

... 
<form method=post action="/upload/" enctype=multipart/form-data> 
    {% csrf_token %} 
    <input type=file name=fileToUpload><br><br> 
    <input type=submit value=Upload> 
</form> 
... 

私は、エラーメッセージが表示されました。大容量のファイルをアップロードするためのソリューションはありますか?ありがとう。

答えて

1

1の手がかりは関数の名前です。 「URL内の単語を数える」とは言わないが、「 URLに数える」と言う。言い換えれば、URLで参照されるページを取得し、そのページ上の単語を数えなければなりません。これは、requests.get()の機能です。

あなたが何を求めているのか分かりません。

+0

アイデアを得ました。ありがとう。私は質問2を再編集しました。 –

関連する問題