We could not upload this file Error retrieving upload URL

897 views
Skip to first unread message

Neville D'Souza

unread,
Dec 6, 2017, 7:51:01 AM12/6/17
to Open edX operations
Hi All,

I get this error while uploading jpg and png files. I have ficus.4 fullstack version installed. I would like to save the images on the local folder. I can see that its trying to communicate with amazon. Can anyone guide me towards correct configuration

Not sure if its because of the ORA version as I am not aware which version comes by default. I haven't installed any xblocks apart from pdf.

sudo vi /edx/app/edxapp/lms.env.json

DEFAULT_FILE_STORAGE: django.core.files.storage.FileSystemStorage
MEDIA_ROOT: /edx/var/credentials/media
MEDIA_URL: /media/

At the moment /edx/var/credentials/media does not exist


tail -100 /edx/var/log/lms/edx.log

Dec  6 07:03:42 www [service_variant=lms][boto][env:sandbox] ERROR [www  7885] [utils.py:224] - Caught exception reading instance data
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/utils.py", line 210, in retry_url
    r = opener.open(req, timeout=timeout)
  File "/usr/lib/python2.7/urllib2.py", line 429, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 447, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1228, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1198, in do_open
    raise URLError(err)
URLError: <urlopen error timed out>
Dec  6 07:03:42 www [service_variant=lms][boto][env:sandbox] ERROR [www  7885] [utils.py:229] - Unable to read instance data, giving up
Dec  6 07:03:42 www [service_variant=lms][openassessment.fileupload.api][env:sandbox] ERROR [www  7885] [s3.py:41] - An internal exception occurred while gen
erating a download URL.
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/backends/s3.py", line 35, in get_download_url
    conn = _connect_to_s3()
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/backends/s3.py", line 60, in _connect_to_s3
    aws_secret_access_key=aws_secret_access_key
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/__init__.py", line 141, in connect_s3
    return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 191, in __init__
    validate_certs=validate_certs, profile_name=profile_name)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/connection.py", line 569, in __init__
    host, config, self.provider, self._required_auth_capability())
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/auth.py", line 989, in get_auth_handler
    'Check your credentials' % (len(names), str(names)))
NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials
Dec  6 07:03:42 www [service_variant=lms][openassessment.xblock.submission_mixin][env:sandbox] ERROR [www  7885] [submission_mixin.py:270] - Error retrieving
 download URL.
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/xblock/submission_mixin.py", line 268, in _get_download_url
    return file_upload_api.get_download_url(self._get_student_item_key())
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/api.py", line 20, in get_download_url
    return backends.get_backend().get_download_url(key)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/backends/s3.py", line 43, in get_download_url
    raise FileUploadInternalError(ex)
FileUploadInternalError: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials
Dec  6 07:05:03 www [service_variant=lms][openedx.core.lib.log_utils][env:sandbox] INFO [www  7958] [log_utils.py:36] - ApiKeyHeaderPermission used: ip="127.
0.0.1", path="/notifier_api/v1/users/"

IMG_0173.jpg
IMG_0174.jpg

Ernesto Sanchez

unread,
Dec 6, 2017, 12:23:39 PM12/6/17
to Open edX operations
Hi, Open edx use s3 from aws by default.

Neville D'Souza

unread,
Dec 7, 2017, 1:35:42 AM12/7/17
to Open edX operations
Thanks Ernesto for your response. Do you know how to use local storage. What options to use in lms.env.json and cms.env.json. Even if it is s3 i would prefer changes in json files rather than server-vars.yml because there are lot of changes done in these files and I would preferably will not update from this version.  I also found there is swift storage. Is it paid or free? https://openedx.atlassian.net/wiki/spaces/OpenOPS/pages/112001170/Use+Swift+for+Data+Storage. But my first preference is local storage. Any setting that switches from default s3 storage to local in lms.env.json and cms.env.json. Any example or link that can help would be great.

Neville D'Souza

unread,
Dec 7, 2017, 6:45:34 AM12/7/17
to Open edX operations
Ok I think S3 storage makes sense rather than local storage. Can any one please share their s3 configuration for media and static files. Any examples of configuration in the below files would be greatly helpful.
 
lms.env.json
lms.auth.json
cms.env.json
cms.auth.json

Like to avoid settings in server-vars.yml

Neville D'Souza

unread,
Dec 9, 2017, 7:49:18 AM12/9/17
to Open edX operations
I tried a few configurations. But I still get the same error. Anybody knows what this is caused by?
"Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format." There are not uppercase or dots or underscore or even numbers. Not sure what is causing this.

I tried the following config but still unsuccessful. I am using boto 2.33.0 version.

For S3 storage (for both Static and Media files):
lms.auth.json and cms.auth.json
  "AWS_ACCESS_KEY_ID": "XXXXXXXXXXXXXX",
  "AWS_QUERYSTRING_AUTH": false,
  "AWS_S3_CUSTOM_DOMAIN": "company.s3.amazonaws.com",
  "AWS_SECRET_ACCESS_KEY": "XXXXXXXXXXXXXXXXXXXXX",
  "AWS_STORAGE_BUCKET_NAME": "company",
  "AWS_QUERYSTRING_EXPIRE": false,
  "AWS_DEFAULT_ACL": "private",

  "DEFAULT_FILE_STORAGE": "storages.backends.s3boto.S3BotoStorage",
  

lms.env.json and cms.env.json
  "MEDIA_ROOT": "media",


  "DEFAULT_FILE_STORAGE": "storages.backends.s3boto.S3BotoStorage",


Restarting Services
    Nginx - sudo systemctl restart nginx
    LMS/CMS - sudo /edx/bin/supervisorctl restart edxapp:
    Workers - sudo /edx/bin/supervisorctl restart edxapp_worker:

The full error I get is shown below. Any one come across this error?

Dec  9 13:40:36 www [service_variant=lms][openassessment.fileupload.api][env:sandbox] ERROR [www  1560] [s3.py:27] - An internal exception occurred while generating an upload URL.
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/backends/s3.py", line 22, in get_upload_url
    headers={'Content-Length': '5242880', 'Content-Type': content_type}
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 434, in generate_url
    bucket, key) + query_part
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 80, in build_url_base
    url_base += self.build_host(server, bucket)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 88, in build_host
    return self.get_bucket_server(server, bucket)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 67, in wrapper
    if len(args) == 3 and check_lowercase_bucketname(args[2]):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 59, in check_lowercase_bucketname
    raise BotoClientError("Bucket names cannot contain upper-case " \
BotoClientError: BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.
Dec  9 13:40:36 www [service_variant=lms][openassessment.xblock.submission_mixin][env:sandbox] ERROR [www  1560] [submission_mixin.py:248] - Error retrieving upload URL.
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/xblock/submission_mixin.py", line 245, in upload_url
    url = file_upload_api.get_upload_url(key, content_type)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/api.py", line 14, in get_upload_url
    return backends.get_backend().get_upload_url(key, content_type)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/backends/s3.py", line 29, in get_upload_url
    raise FileUploadInternalError(ex)
FileUploadInternalError: BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.

Neville D'Souza

unread,
Dec 11, 2017, 1:24:46 AM12/11/17
to Open edX operations
Anybody any suggestions?

LIubov Fomicheva

unread,
Dec 13, 2017, 7:18:09 AM12/13/17
to Open edX operations
Hello Neville!

  I suppose you should change FILE_UPLOAD_STORAGE_BUCKET_NAME in [lms|cms].env.json (the default value is unusable stub containing "SET-ME-PLEASE"). Also, it would be a good idea to set a bucket name in GRADES_DOWNLOAD (and VIDEO_UPLOAD_PIPELINE/FINANCIAL_REPORTS if required) in the same files.

Hope that helps,
  Liubov

понедельник, 11 декабря 2017 г., 9:24:46 UTC+3 пользователь Neville D'Souza написал:
Anybody any suggestions?

Neville D'Souza

unread,
Dec 27, 2017, 11:48:17 AM12/27/17
to Open edX operations
Hi Liubov,

Thanks for your response. Your suggestions has worked somewhat. The error has changed. I get a 400 bad request.. I added FILE_UPLOAD_STORAGE_BUCKET_NAME in [lms|cms].env.json. I get an error on the webpage which I have attached as a screenshot.I get an error on /edx/var/log/lms/edx.log


Dec 27 16:09:25 www [service_variant=lms][openassessment.fileupload.api][env:sandbox] ERROR [www  12341] [s3.py:41] - An internal exception occurred while generating a download URL.
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/backends/s3.py", line 36, in get_download_url
    bucket = conn.get_bucket(bucket_name)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 503, in get_bucket
    return self.head_bucket(bucket_name, headers=headers)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 550, in head_bucket
    response.status, response.reason, body)
S3ResponseError: S3ResponseError: 400 Bad Request
Dec 27 16:09:25 www [service_variant=lms][openassessment.xblock.submission_mixin][env:sandbox] ERROR [www  12341] [submission_mixin.py:270] - Error retrieving download URL.
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/xblock/submission_mixin.py", line 268, in _get_download_url
    return file_upload_api.get_download_url(self._get_student_item_key())
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/api.py", line 20, in get_download_url
    return backends.get_backend().get_download_url(key)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/backends/s3.py", line 43, in get_download_url
    raise FileUploadInternalError(ex)
FileUploadInternalError: S3ResponseError: 400 Bad Request

I have done the following changes in the json files.

lms.auth.json and cms.auth.json
  "AWS_ACCESS_KEY_ID": "XXXXXXXXXXXX",
  "AWS_QUERYSTRING_AUTH": true,
  "AWS_S3_CUSTOM_DOMAIN": "edxdatap.s3.amazonaws.com",
  "AWS_SECRET_ACCESS_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "AWS_STORAGE_BUCKET_NAME": "edxdatap",
  "AWS_S3_REGION_NAME": "us-east-2",
 
  "DEFAULT_FILE_STORAGE": "storages.backends.s3boto.S3BotoStorage",


lms.env.json and cms.env.json
  "MEDIA_ROOT": "media",

 
  "DEFAULT_FILE_STORAGE": "storages.backends.s3boto.S3BotoStorage",

  "FILE_UPLOAD_STORAGE_BUCKET_NAME": "edxdatap",
  "FILE_UPLOAD_STORAGE_PREFIX": "submissions_attachments",

I have created media and submissions_attachments in edxdatap bucket.

CORS Configuration on S3

<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedHeader>*</AllowedHeader>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>GET</AllowedMethod>
    </CORSRule>
</CORSConfiguration>

Bucket Policy Applied
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1403207543000",
      "Effect": "Allow",
  "Principal": "*",
      "Action": [
        "s3:*"
      ],
      "Resource": ["arn:aws:s3:::edxdatap/*"
      ]
    }
  ]
}

I am pretty sure I am missing something.Can anyone see something wrong in my configuration?


Screenshot_1.jpg

Neville D'Souza

unread,
Jan 8, 2018, 4:18:12 AM1/8/18
to Open edX operations
Has anybody faced similar error?

Could the error be related to https://github.com/boto/boto/issues/2916. My bucket is in Ohio region. Pretty sure any advise will be helpful. 
 

Neville D'Souza

unread,
Jan 10, 2018, 5:05:07 AM1/10/18
to Open edX operations
I using the below link to configure S3 storage. http://edx-ora-2.readthedocs.io/en/latest/architecture/fileupload.html

This most likely is the way to configure it. But I still get the same error "400 Bad Request" . I have done exactly as per this link.One of the paragraph says the below.

"In order to provide a seamless interaction on the client, this may require an AJAX request to first retrieve the URL, then upload content. This type of request is restricted via Cross Origin Policy, but can be resolved through CORS configuration on the content store"

Can any one help me understand this please? What I need to do?

Neville D'Souza

unread,
Jan 10, 2018, 8:39:54 AM1/10/18
to Open edX operations

Finally a ray of hope. Managed to get around the 400 BAD Request. Turned out problem was with the signature version. Had to create a bucket where it supports v2. Now the file seems to be uploaded but dont see the image. I can see link created on S3 like attached below but no image.

I get the below error in the backed log

Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/backends/s3.py", line 36, in get_download_url
    bucket = conn.get_bucket(bucket_name)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 503, in get_bucket
    return self.head_bucket(bucket_name, headers=headers)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/boto/s3/connection.py", line 536, in head_bucket
    raise err
S3ResponseError: S3ResponseError: 403 Forbidden
Jan 10 15:07:37 www [service_variant=lms][openassessment.xblock.submission_mixin][env:sandbox] ERROR [www  6764] [submission_mixin.py:270] - Error retrieving download URL.
Traceback (most recent call last):
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/xblock/submission_mixin.py", line 268, in _get_download_url
    return file_upload_api.get_download_url(self._get_student_item_key())
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/api.py", line 20, in get_download_url
    return backends.get_backend().get_download_url(key)
  File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/openassessment/fileupload/backends/s3.py", line 43, in get_download_url
    raise FileUploadInternalError(ex)
FileUploadInternalError: S3ResponseError: 403 Forbidden

Neville D'Souza

unread,
Jan 23, 2018, 11:10:33 AM1/23/18
to Open edX operations
Ok resolved now. I deleted the folder submission_attachments inside the bucket and created it using S3 explorer so it has the same access permissions as the bucket, Also changed bucket policy to give permissions on bucket and inside bucket. Not sure which one made the difference but it works for now.:)

lookoutapiano

unread,
Oct 31, 2018, 8:54:36 PM10/31/18
to Open edX operations
Hi I'm having the same problem here but I'm getting an Access to XMLHttpRequest Error instead.

The log doesn't show any error here's the error message on the request:

<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>

Did I set up the bucket in a wrong way?
Reply all
Reply to author
Forward
0 new messages