LearningLocker / learninglocker

Learning Locker - The Open Source Learning Record Store. Started in 2014.
https://learningpool.com/solutions/learning-record-store-learning-locker/learning-locker-community-overview/
GNU General Public License v3.0
553 stars 277 forks source link

Problem communicating with the Learning Record Store #126

Closed barrysampson closed 10 years ago

barrysampson commented 10 years ago

After successfully testing LL on my laptop, I've recently set it up on a Digital Ocean Droplet with less success...

Following what I understand to be Laravel best practice, I've installed LL outside the web root, and symlinked to the public folder (so far, so good). The site is now up and running, and I can create users and new LRS instances. However, I am unable to submit statements to it.

I have a Wordpress/Learndash site set up with Grassblade and a couple of simple test courses created in Storyline. If I point the site at a Wax LRS instance, everything works ok. If I set it up to work with LL I get a 401 cannot connect to server error.

I've tried sending a statement from the generator at tincanapi.com/statement-generator and it spits out a 404 error.

The full error is below:

There was a problem communicating with the Learning Record Store. (404 | {"error":true,"message":"","code":404,"trace":[{"file":"\/var\/www\/learninglocker\/vendor\/laravel\/framework\/src\/Illuminate\/Routing\/Router.php","line":1021,"function":"match","class":"Illuminate\Routing\RouteCollection","type":"->","args":[{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}]},{"file":"\/var\/www\/learninglocker\/vendor\/laravel\/framework\/src\/Illuminate\/Routing\/Router.php","line":989,"function":"findRoute","class":"Illuminate\Routing\Router","type":"->","args":[{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}]},{"file":"\/var\/www\/learninglocker\/vendor\/laravel\/framework\/src\/Illuminate\/Routing\/Router.php","line":968,"function":"dispatchToRoute","class":"Illuminate\Routing\Router","type":"->","args":[{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}]},{"file":"\/var\/www\/learninglocker\/vendor\/laravel\/framework\/src\/Illuminate\/Foundation\/Application.php","line":738,"function":"dispatch","class":"Illuminate\Routing\Router","type":"->","args":[{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}]},{"file":"\/var\/www\/learninglocker\/vendor\/laravel\/framework\/src\/Illuminate\/Foundation\/Application.php","line":708,"function":"dispatch","class":"Illuminate\Foundation\Application","type":"->","args"...p","line":72,"function":"handle","class":"Illuminate\Http\FrameGuard","type":"->","args":[{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}},1,true]},{"file":"\/var\/www\/learninglocker\/vendor\/laravel\/framework\/src\/Illuminate\/Cookie\/Queue.php","line":47,"function":"handle","class":"Illuminate\Session\Middleware","type":"->","args":[{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}},1,true]},{"file":"\/var\/www\/learninglocker\/vendor\/laravel\/framework\/src\/Illuminate\/Cookie\/Guard.php","line":51,"function":"handle","class":"Illuminate\Cookie\Queue","type":"->","args":[{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}},1,true]},{"file":"\/var\/www\/learninglocker\/vendor\/stack\/builder\/src\/Stack\/StackedHttpKernel.php","line":23,"function":"handle","class":"Illuminate\Cookie\Guard","type":"->","args":[{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}},1,true]},{"file":"\/var\/www\/learninglocker\/vendor\/laravel\/framework\/src\/Illuminate\/Foundation\/Application.php","line":606,"function":"handle","class":"Stack\StackedHttpKernel","type":"->","args":[{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}]},{"file":"\/var\/www\/learninglocker\/public\/index.php","line":49,"function":"run","class":"Illuminate\Foundation\Application","type":"->","args":[]}]})

I've reached the conclusion that I must have configured something wrong which means that the expected end point at http://parcel-project.org/data/xAPI/ is not being found. I just can't work out what it is that I've done wrong!

Any suggestions are greatly appreciated.

Klaasie commented 10 years ago

I've had this issue too. In my case the last slash caused the error message. If you try with http://parcel-project.org/data/xAPI instead you'll probably see the statement successfully being sent.

barrysampson commented 10 years ago

Thanks for the suggestion Klassie. I've tried with and without the last slash and I get the same error each time.

davetosh commented 10 years ago

If you use http://parcel-project.org/data/xAPI/statements do you get any joy?

barrysampson commented 10 years ago

If I use http://parcel-project.org/data/xAPI/statements the Storyline modules launch and run without any errors, but no statements are recorded in the LRS.

If I try that address with the statement generator I get the same error that I pasted above.

barrysampson commented 10 years ago

Hmm. I'm sure that I haven't changed anything else but now I'm getting 404 errors when I try to launch the Storyline content even with the end point set to http://parcel-project.org/data/xAPI/statements.

Klaasie commented 10 years ago

If the storyline support is up to date then they use Tin Can version 0.9 which isn't accepted by LL. Just out of curiosity, the statement generator within LL does allow you go generate statements?

barrysampson commented 10 years ago

Yes I can generate statement with the LL statement generator.

barrysampson commented 10 years ago

So, following Klassie's suggestion about lack of Storyline compatibility, I have got LL working using the Golf Example prototype content with the endpoint set to http://parcel-project.org/data/xAPI/ (including final slash).

Does that simply mean there's no way to use Storyline content? I've tried converting one of my test courses to xAPI 1.0 using the tool at http://converter.saltbox.com/ but it still doesn't work.

fugu13 commented 10 years ago

Hi @barrysampson :)

Just popping in to mention that, while we do add activity names into storyline and a few other odds and ends, converter.saltbox.com doesn't modify the Experience API version supported by Storyline (it'd be technically possible, but a lot of work, and most LRSs in actual use support 0.9).

I do know Articulate plans a Storyline upgrade to 1.0.0 at some point, but I'm guessing they're waiting until they've got Articulate Studio fully supporting 1.0.0 (right now it couldn't be said to support the Experience API at all, conformance is bad enough, but they've committed to having a fix in a free update).

barrysampson commented 10 years ago

Thanks @fugu13, everything has finally become much clearer. It's always a relief when you find something isn't working because it's not supposed to!

I'll just use an alternative LRS until Storyline implements 1.0.

garemoko commented 10 years ago

@fugu13 just wondering if the code for your converter is available open source if anybody did want to take it further?

HumeraShazia commented 9 years ago

Hi @barrysampson , Have you tried GrassBlade LRS http://www.nextsoftwaresolutions.com/grassblade-lrs-experience-api/ ? Here is a link https://nextsoftwaresolutions.zendesk.com/hc/en-us/articles/203839019-Human-Readable-name-instead-of-IDs-for-Articulate-Content .It may be helpful.

hallshouse commented 9 years ago

@barrysampson I looked at Digital Ocean as well and was not able to get LL working properly. I would recommend trying Impact VPS http://impactvps.com/index.html using a free trial before trying another. Within the next few days, you will see a KB article I've written in their knowledgebase on installing a MEAN Stack. I'm having great success with Storyline2 now that we've found the correct URL Query. I'm also currently building a Tin Can Launcher that works in WordPress. The launcher builds and Encodes the URL for you, it then creates a button for you to paste into your WordPress post or page. Right now the launcher is working, however, I'm testing it against eLearning and non-eLearning projects before releasing it.

Don't give up on LL, it offers a great deal more flexibility the GrassBlade.

barrysampson commented 9 years ago

@HumeraShazia Since Articulate released Storyline 2 (with support for xAPI 1.0) we've had no problem and Learning Locker has been the perfect solution for us.

@hallshouse The issue I had was related to Storyline's lack of support for xAPI 1.0. Once Storyline 2 came out we had no problems - we have had Learning Locker running on a Digital Ocean droplet for over a year now without any issues.

ryasmi commented 9 years ago

Thanks for your input @barrysampson and @hallshouse :+1: