Overhang.io

Error when importing a course

Andreas 11:02 AM

Help please: When using the Course Import feature I encounter an error in the unpacking stage:

There was an error while unpacking the file. S3ResponseError: 403 Forbidden

Is this an Ironwood/configuration error, or a problem with Tutor/config? (edited)

Hi @ak00001! It’s difficult to debug this without the full stacktrace. Can you please give the output of tutor local logs cms --tail=200 generated right after the error was triggered?

tutor-lms:/$ tutor local logs cms --tail=200
docker-compose -f /home/andreas_krokan/.local/share/tutor/env/local/docker-compose.yml --project-name tutor_local logs --tail 200 cms
Attaching to tutor_local_cms_1
cms_1               | WARNING:py.warnings:/openedx/edx-platform/lms/djangoapps/courseware/__init__.py:5: DeprecationWarning: Importing 'lms.djangoapps.courseware' as 'courseware' is no longer supported
cms_1               |   warnings.warn("Importing 'lms.djangoapps.courseware' as 'courseware' is no longer supported", DeprecationWarning)
cms_1               | 
cms_1               | WARNING:py.warnings:/openedx/edx-platform/lms/djangoapps/courseware/__init__.py:5: DeprecationWarning: Importing 'lms.djangoapps.courseware' as 'courseware' is no longer supported
cms_1               |   warnings.warn("Importing 'lms.djangoapps.courseware' as 'courseware' is no longer supported", DeprecationWarning)
cms_1               | 
cms_1               | WARNING:py.warnings:/openedx/edx-platform/lms/djangoapps/courseware/__init__.py:5: DeprecationWarning: Importing 'lms.djangoapps.courseware' as 'courseware' is no longer supported
cms_1               |   warnings.warn("Importing 'lms.djangoapps.courseware' as 'courseware' is no longer supported", DeprecationWarning)
cms_1               | 
cms_1               | WARNING:py.warnings:/openedx/edx-platform/lms/djangoapps/courseware/__init__.py:5: DeprecationWarning: Importing 'lms.djangoapps.courseware' as 'courseware' is no longer supported
cms_1               |   warnings.warn("Importing 'lms.djangoapps.courseware' as 'courseware' is no longer supported", DeprecationWarning)
cms_1               | 
cms_1               | 2019-08-07 07:56:26,515 WARNING 85 [enterprise.utils] utils.py:50 - Could not import Registry from third_party_auth.provider
cms_1               | 2019-08-07 07:56:26,515 WARNING 85 [enterprise.utils] utils.py:51 - cannot import name EnterpriseCustomerUser
cms_1               | 2019-08-07 07:56:26,746 WARNING 83 [enterprise.utils] utils.py:50 - Could not import Registry from third_party_auth.provider
cms_1               | 2019-08-07 07:56:26,747 WARNING 83 [enterprise.utils] utils.py:51 - cannot import name EnterpriseCustomerUser
cms_1               | 2019-08-07 08:19:29,834 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/home/", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/course/course-v1:KrokanX+DLA001+2019", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/home/"}, "time": "2019-08-07T08:19:29.833863+00:00", "page": null}
cms_1               | 2019-08-07 08:42:20,229 INFO 85 [tracking] logger.py:50 - {"username": "", "event_type": "/", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": null, "org_id": "", "course_id": "", "path": "/"}, "time": "2019-08-07T08:42:20.229208+00:00", "page": null}
cms_1               | 2019-08-07 11:17:48,943 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/container/block-v1:KrokanX+DLA002+2019+type@vertical+block@9ed3b78245d343e1b46ebea4d4599140", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://courses.krokan.io/courses/course-v1:KrokanX+DLA002+2019/courseware/ff65111d8237451ba981d2ffd16b83aa/84f412fd904341bf9d4bee2893c4f46d/1?activate_block_id=block-v1%3AKrokanX%2BDLA002%2B2019%2Btype%40vertical%2Bblock%409ed3b78245d343e1b46ebea4d4599140", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/container/block-v1:KrokanX+DLA002+2019+type@vertical+block@9ed3b78245d343e1b46ebea4d4599140"}, "time": "2019-08-07T11:17:48.942374+00:00", "page": null}
cms_1               | 2019-08-07 11:17:49,756 WARNING 83 [py.warnings] locator.py:863 - /tmp/mako_cms/a5eebd6bfdd582a823356cb512d2e4e2/container.html.py:312: DeprecationWarning: Name is no longer supported as a property of Locators. Please use the block_id property.
cms_1               |   __M_writer(js_escaped_string(context_course.location.name ))
cms_1               | 
cms_1               | 2019-08-07 11:17:49,757 WARNING 83 [py.warnings] locator.py:889 - /tmp/mako_cms/a5eebd6bfdd582a823356cb512d2e4e2/container.html.py:320: DeprecationWarning: Revision is no longer supported as a property of Locators. Please use the branch property.
cms_1               |   __M_writer(js_escaped_string(context_course.location.revision ))
cms_1               | 
cms_1               | 2019-08-07 11:17:49,758 ERROR 83 [pipeline_mako.helpers.studiofrontend] studiofrontend.py:29 - Error loading studiofrontend language files
cms_1               | Traceback (most recent call last):
cms_1               |   File "/openedx/edx-platform/common/djangoapps/pipeline_mako/helpers/studiofrontend.py", line 26, in load_sfe_i18n_messages
cms_1               |     with open(messages_path) as inputfile:
cms_1               | IOError: [Errno 2] No such file or directory: '/openedx/staticfiles/studio-frontend/dist/i18n/messages/nb.json'
cms_1               | 2019-08-07 11:17:50,935 INFO 85 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/xblock/block-v1:KrokanX+DLA002+2019+type@vertical+block@9ed3b78245d343e1b46ebea4d4599140/container_preview", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/container/block-v1:KrokanX+DLA002+2019+type@vertical+block@9ed3b78245d343e1b46ebea4d4599140", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {\"_\": [\"1565176670636\"]}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/xblock/block-v1:KrokanX+DLA002+2019+type@vertical+block@9ed3b78245d343e1b46ebea4d4599140/container_preview"}, "time": "2019-08-07T11:17:50.934474+00:00", "page": null}
cms_1               | 2019-08-07 11:17:51,662 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/xblock/container/block-v1:KrokanX+DLA002+2019+type@vertical+block@9ed3b78245d343e1b46ebea4d4599140", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/container/block-v1:KrokanX+DLA002+2019+type@vertical+block@9ed3b78245d343e1b46ebea4d4599140", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/xblock/container/block-v1:KrokanX+DLA002+2019+type@vertical+block@9ed3b78245d343e1b46ebea4d4599140"}, "time": "2019-08-07T11:17:51.661974+00:00", "page": null}
cms_1               | 2019-08-07 11:17:53,166 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/course/course-v1:KrokanX+DLA002+2019", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/container/block-v1:KrokanX+DLA002+2019+type@vertical+block@9ed3b78245d343e1b46ebea4d4599140", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/course/course-v1:KrokanX+DLA002+2019"}, "time": "2019-08-07T11:17:53.166468+00:00", "page": null}
cms_1               | 2019-08-07 11:17:53,418 WARNING 83 [py.warnings] locator.py:863 - /tmp/mako_cms/a5eebd6bfdd582a823356cb512d2e4e2/course_outline.html.py:220: DeprecationWarning: Name is no longer supported as a property of Locators. Please use the block_id property.
cms_1               |   __M_writer(js_escaped_string(context_course.location.name ))
cms_1               | 
cms_1               | 2019-08-07 11:17:53,418 WARNING 83 [py.warnings] locator.py:889 - /tmp/mako_cms/a5eebd6bfdd582a823356cb512d2e4e2/course_outline.html.py:228: DeprecationWarning: Revision is no longer supported as a property of Locators. Please use the branch property.
cms_1               |   __M_writer(js_escaped_string(context_course.location.revision ))
cms_1               | 
cms_1               | 2019-08-07 11:17:53,424 ERROR 83 [pipeline_mako.helpers.studiofrontend] studiofrontend.py:29 - Error loading studiofrontend language files
cms_1               | Traceback (most recent call last):
cms_1               |   File "/openedx/edx-platform/common/djangoapps/pipeline_mako/helpers/studiofrontend.py", line 26, in load_sfe_i18n_messages
cms_1               |     with open(messages_path) as inputfile:
cms_1               | IOError: [Errno 2] No such file or directory: '/openedx/staticfiles/studio-frontend/dist/i18n/messages/nb.json'
cms_1               | 2019-08-07 11:17:53,687 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/api/courses/v1/validation/course-v1:KrokanX+DLA002+2019/", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/course/course-v1:KrokanX+DLA002+2019", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {\"all\": [\"true\"], \"graded_only\": [\"true\"]}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/api/courses/v1/validation/course-v1:KrokanX+DLA002+2019/"}, "time": "2019-08-07T11:17:53.687799+00:00", "page": null}
cms_1               | 2019-08-07 11:17:53,690 INFO 85 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/api/courses/v1/quality/course-v1:KrokanX+DLA002+2019/", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/course/course-v1:KrokanX+DLA002+2019", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {\"exclude_graded\": [\"true\"], \"all\": [\"true\"]}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/api/courses/v1/quality/course-v1:KrokanX+DLA002+2019/"}, "time": "2019-08-07T11:17:53.690432+00:00", "page": null}
cms_1               | 2019-08-07 11:17:53,703 WARNING 83 [edx_rest_framework_extensions.auth.jwt.middleware] middleware.py:62 - The view CourseValidationView allows Jwt Authentication but needs to include the NotJwtRestrictedApplication permission class (adding it for you)
cms_1               | 2019-08-07 11:17:53,704 WARNING 85 [edx_rest_framework_extensions.auth.jwt.middleware] middleware.py:62 - The view CourseQualityView allows Jwt Authentication but needs to include the NotJwtRestrictedApplication permission class (adding it for you)
cms_1               | 2019-08-07 11:17:55,193 INFO 85 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/course/course-v1:KrokanX+DLA002+2019", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/"}, "time": "2019-08-07T11:17:55.193574+00:00", "page": null}
cms_1               | 2019-08-07 11:17:55,253 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/home/", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/course/course-v1:KrokanX+DLA002+2019", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/home/"}, "time": "2019-08-07T11:17:55.252934+00:00", "page": null}
cms_1               | 2019-08-07 11:18:00,003 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/organizations", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/home/", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/organizations"}, "time": "2019-08-07T11:18:00.003095+00:00", "page": null}
cms_1               | 2019-08-07 11:18:13,195 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/course/", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/home/", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/course/"}, "time": "2019-08-07T11:18:13.195251+00:00", "page": null}
cms_1               | 2019-08-07 11:18:13,209 INFO 83 [xmodule.modulestore.mixed] mixed.py:657 - Creating course run course-v1:TestX+101+2019...
cms_1               | 2019-08-07 11:18:13,394 INFO 83 [openedx.core.djangoapps.content.course_overviews.models] models.py:153 - Creating course overview for course-v1:TestX+101+2019.
cms_1               | 2019-08-07 11:18:13,521 INFO 83 [celery_utils.logged_task] logged_task.py:31 - Task lms.djangoapps.discussion.tasks.update_discussions_map[9cf6b39f-4e68-4494-808f-eeeed212e584] submitted with arguments [{'course_id': u'course-v1:TestX+101+2019'}], None
cms_1               | 2019-08-07 11:18:13,573 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function listen_for_course_publish at 0x7f7d48abd050> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:13,573 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function _listen_for_course_publish at 0x7f7d488c06e0> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:13,574 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function _listen_for_course_publish at 0x7f7d488c0b90> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:13,574 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function update_block_structure_on_course_publish at 0x7f7d48864aa0> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:13,574 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function _listen_for_course_publish at 0x7f7d48864410> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:13,574 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function update_discussions_on_course_publish at 0x7f7d487d2b90> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:13,575 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function trigger_update_xblocks_cache_task at 0x7f7d487f0e60> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:13,575 INFO 83 [xmodule.modulestore.mixed] mixed.py:665 - Course run course-v1:TestX+101+2019 created successfully!
cms_1               | 2019-08-07 11:18:14,078 INFO 83 [tracking] logger.py:42 - {"username": "tzarandreas", "event_source": "server", "name": "edx.course.enrollment.activated", "accept_language": "nb-no", "time": "2019-08-07T11:18:14.078347+00:00", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "page": null, "host": "studio.courses.krokan.io", "session": "260306ed80e23e73ee340a58e3b6c1f0", "referer": "https://studio.courses.krokan.io/home/", "context": {"user_id": 3, "org_id": "TestX", "course_id": "course-v1:TestX+101+2019", "path": "/course/"}, "ip": "176.111.206.130", "event": {"course_id": "course-v1:TestX+101+2019", "user_id": 3, "mode": "audit"}, "event_type": "edx.course.enrollment.activated"}
cms_1               | 2019-08-07 11:18:14,158 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/course/course-v1:TestX+101+2019", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/home/", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/course/course-v1:TestX+101+2019"}, "time": "2019-08-07T11:18:14.158091+00:00", "page": null}
cms_1               | 2019-08-07 11:18:14,279 ERROR 83 [pipeline_mako.helpers.studiofrontend] studiofrontend.py:29 - Error loading studiofrontend language files
cms_1               | Traceback (most recent call last):
cms_1               |   File "/openedx/edx-platform/common/djangoapps/pipeline_mako/helpers/studiofrontend.py", line 26, in load_sfe_i18n_messages
cms_1               |     with open(messages_path) as inputfile:
cms_1               | IOError: [Errno 2] No such file or directory: '/openedx/staticfiles/studio-frontend/dist/i18n/messages/nb.json'
cms_1               | 2019-08-07 11:18:14,483 INFO 85 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/api/courses/v1/quality/course-v1:TestX+101+2019/", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/course/course-v1:TestX+101+2019", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {\"exclude_graded\": [\"true\"], \"all\": [\"true\"]}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/api/courses/v1/quality/course-v1:TestX+101+2019/"}, "time": "2019-08-07T11:18:14.483436+00:00", "page": null}
cms_1               | 2019-08-07 11:18:14,487 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/api/courses/v1/validation/course-v1:TestX+101+2019/", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/course/course-v1:TestX+101+2019", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {\"all\": [\"true\"], \"graded_only\": [\"true\"]}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/api/courses/v1/validation/course-v1:TestX+101+2019/"}, "time": "2019-08-07T11:18:14.487156+00:00", "page": null}
cms_1               | 2019-08-07 11:18:14,582 INFO 83 [openedx.core.djangoapps.content.course_overviews.models] models.py:150 - Updating course overview for course-v1:TestX+101+2019.
cms_1               | 2019-08-07 11:18:14,695 INFO 83 [celery_utils.logged_task] logged_task.py:31 - Task lms.djangoapps.discussion.tasks.update_discussions_map[e96a1bab-2873-47bb-9e03-c7c3a415ac30] submitted with arguments [{'course_id': u'course-v1:TestX+101+2019'}], None
cms_1               | 2019-08-07 11:18:14,732 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function listen_for_course_publish at 0x7f7d48abd050> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:14,733 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function _listen_for_course_publish at 0x7f7d488c06e0> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:14,734 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function _listen_for_course_publish at 0x7f7d488c0b90> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:14,734 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function update_block_structure_on_course_publish at 0x7f7d48864aa0> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:14,735 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function _listen_for_course_publish at 0x7f7d48864410> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:14,736 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function update_discussions_on_course_publish at 0x7f7d487d2b90> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:14,736 INFO 83 [xmodule.modulestore.django] django.py:198 - Sent course_published signal to <function trigger_update_xblocks_cache_task at 0x7f7d487f0e60> with kwargs {'course_key': CourseLocator(u'TestX', u'101', u'2019', None, None)}. Response was: None
cms_1               | 2019-08-07 11:18:52,840 INFO 83 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/import/course-v1:TestX+101+2019", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/course/course-v1:TestX+101+2019", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/import/course-v1:TestX+101+2019"}, "time": "2019-08-07T11:18:52.840593+00:00", "page": null}
cms_1               | 2019-08-07 11:19:25,053 INFO 85 [tracking] logger.py:50 - {"username": "tzarandreas", "event_type": "/import/course-v1:TestX+101+2019", "ip": "176.111.206.130", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15", "host": "studio.courses.krokan.io", "referer": "https://studio.courses.krokan.io/import/course-v1:TestX+101+2019", "accept_language": "nb-no", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 3, "org_id": "", "course_id": "", "path": "/import/course-v1:TestX+101+2019"}, "time": "2019-08-07T11:19:25.053072+00:00", "page": null}
cms_1               | 2019-08-07 11:19:25,112 INFO 85 [contentstore.views.import_export] import_export.py:201 - Course import course-v1:TestX+101+2019: Upload complete
cms_1               | 2019-08-07 11:19:25,619 INFO 85 [contentstore.views.import_export] import_export.py:213 - Course import course-v1:TestX+101+2019: Temp data cleared
cms_1               | 2019-08-07 11:19:25,620 ERROR 85 [contentstore.views.import_export] import_export.py:216 - error importing course
cms_1               | Traceback (most recent call last):
cms_1               |   File "/openedx/edx-platform/cms/djangoapps/contentstore/views/import_export.py", line 204, in _write_chunk
cms_1               |     storage_path = course_import_export_storage.save(u'olx_import/' + filename, django_file)
cms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/core/files/storage.py", line 54, in save
cms_1               |     return self._save(name, content)
cms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/storages/backends/s3boto.py", line 409, in _save
cms_1               |     key = self.bucket.get_key(encoded_name)
cms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/boto/s3/bucket.py", line 193, in get_key
cms_1               |     key, resp = self._get_key_internal(key_name, headers, query_args_l)
cms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/boto/s3/bucket.py", line 231, in _get_key_internal
cms_1               |     response.status, response.reason, '')
cms_1               | S3ResponseError: S3ResponseError: 403 Forbidden
cms_1               |

@regis, here’s the output. Thanks for looking into this.

  1. Did you modify the platform configuration in any way?
  2. Which version of tutor are you running? (tutor --version)
  3. Do you have any enabled plugins? (tutor plugins list)

tutor, version 3.6.1
plugins: discovery, figures (both enabled)

Are you trying to import a course where videos are stored on S3?

No, no videos or other content in S3

Are you able to forward me the course you are trying to import, so that I can better debug this?

I got the same error on three different courses. I will PM you a link to the smallest course.

@regis, we can rule out the course, as I get the same error when I attempt to export the demo course imported through tutor local importdemocourse.

https://pastebin.com/aR69LrTk

I think I managed to reproduce the issue. Did you at any point attempt to enable the “minio” plugin? It sets a OPENEDX_AWS_SECRET_ACCESS_KEY configuration value that is not removed after the plugin is uninstalled. You can check by running tutor config printvalue OPENEDX_AWS_SECRET_ACCESS_KEY.

If this last command prints anything, then you need to remove this configuration value. To do so, run:

tutor config save --unset OPENEDX_AWS_SECRET_ACCESS_KEY

During uninstall, the plugin should probably print that some values should be manually removed. I’ll try to address that in a future release.

EDIT: I created a corresponding github issue https://github.com/overhangio/tutor/issues/241

Awesome job Regis, that did the job! And thanks for the speediness!

Yes, the minio plugin was installed, enabled, disabled and then uninstalled. And I moved on and forgot that I ever played with it…

Import/export works like a charm now :slight_smile: