Message Boards Message Boards

Use index.html files in Wolfram Cloud sites?

GROUPS:

Cross post on StackExchange: https://mathematica.stackexchange.com/questions/162265/using-index-html-files-in-wolfram-cloud-sites


Part as exercise, part so I could write data-science blog posts I built a website builder using Mathematica that sets up sites in the cloud.

As an example site, here is a paclet server website I set up: https://www.wolframcloud.com/objects/b3m2a1.paclets/PacletServer/main.html

Unfortunately, to get this to work I had to remap my site's index.html file to a main.html file, because when I try to view the site at the index.html either by explicitly routing there or by going to the implicit view I am pushed back to the implicit view and given a 500 error.

Note that I cannot copy the index.html file to the site root i.e.,

CopyFile[
 CloudObject["https://www.wolframcloud.com/objects/b3m2a1.paclets/PacletServer/index.html"],
 CloudObject["https://www.wolframcloud.com/objects/b3m2a1.paclets/PacletServer", Permissions->"Public"]
 ]

as I get a CloudObject::srverr failure

I can't even set up a permanent redirect like so:

CloudDeploy[
 Delayed@HTTPRedirect[
   "https://www.wolframcloud.com/objects/b3m2a1.paclets/PacletServer/main.html",
   <|"StatusCode" -> 301|>
   ],
 "server",
 Permissions -> "Public"
 ]

CloudObject["https://www.wolframcloud.com/objects/b3m2a1.paclets/server"]

As while this apparently worked, going to that site causes my browser to spin infinitely and before finally giving up.

Even more, all of these possible hacks are ugly and I'd much rather work with the standard website setup.

How can I do this?

POSTED BY: b3m2a1 ​ 
Answer
7 months ago

What you're doing now is the best way to do such a thing. We have plans to do better though, to do something like designate a cloud object (such as index.html) to serve as the "face" of any cloud directory, not just the $CloudRootDirectory.

POSTED BY: Joel Klein
Answer
7 months ago

Wonderful! I look forward to that.

POSTED BY: b3m2a1 ​ 
Answer
7 months ago

Any idea what the timeline for this might be? I'm assuming it doesn't have to be pinned to the standard Mathematica release schedule, being a Cloud feature.

POSTED BY: b3m2a1 ​ 
Answer
7 months ago

Cloud software releases much more often than Mathematica (try CloudEvaluate[$CloudVersion, CloudBase -> "https://www.wolframcloud.com"] to check what the current version is and when it was built), and the Wolfram Language side to contact the cloud is largely contained in the CloudObjects paclet that is pushed to the public paclet servers at the same time that the cloud software is changed.

I can't comment on release specifics officially, but I can say it is being actively worked on.

POSTED BY: Joel Klein
Answer
7 months ago

One final follow up on this. When this feature finally gets rolled out, whenever that might be, how will we know? I can't say I really know where to look for an up-to-date listing of the cloud's various features--or if such a (very useful) listing exists.

POSTED BY: b3m2a1 ​ 
Answer
6 months ago

I've linked this thread in the ticket where we're implementing this. We'll reply back on this thread when we push this support.

We've had release notes in the past, it may be getting a comeback.

POSTED BY: Joel Klein
Answer
6 months ago

Any progress? The more I use my cloud resources and share them with others the more others are confused why the cloud doesn't work like a website should. (i.e why they have to go to https://www.wolframcloud.com/objects/b3m2a1.paclets/PacletServer/main.html when experience dictates https://www.wolframcloud.com/objects/b3m2a1.paclets/PacletServer/ should suffice).

POSTED BY: b3m2a1 ​ 
Answer
4 months ago

Hi Joel, it's been like 3 months for something that to my naive eyes seems like it should take 2 weeks.

Is this still on your radar or does Stephen have you chasing geese?

POSTED BY: b3m2a1 ​ 
Answer
2 months ago

We're getting very close. The feature itself has been ready, we're just waiting for other things in the same release to wrap up.

POSTED BY: Joel Klein
Answer
2 months ago

This feature is now live.

(1) if you visit a cloud object directory and do nothing else, it will show a page indicating it's a directory, instead of giving the 500 Internal Server Error page.

(2) inside a cloud object directory, if you create a cloud object named index.html or index.nb, it will be served when the directory URL is accessed. The object can be any type (including an APIFunction or Delayed or FormPage), those are just the magic names to use. You need to additionally assign appropriate permissions to those objects (read for static content, execute for server-side WL content like APIFunction).

In future we will have support for specifying any cloud object, not just ones with magic names, but for now this should serve the purpose.

Example:

dir = CreateDirectory[CloudObject["directory-index"]]
CloudDeploy[ExportForm[Panel[
   Column[{
       Style["How to use a Directory Index in Wolfram CLoud", Large, Bold],
       "",
       "1. If you visit a cloud object directory and do nothing else, it will show a page indicating it's a directory.",
       "2. Inside a cloud object directory, if you create a cloud object named index.html or index.nb, it will be served when the     directory URL is accessed. The object can be any type (including an APIFunction or Delayed or FormPage), those are just the magic names to use. You need to additionally assign appropriate permissions to those objects (read for static content, execute for server-side WL content like APIFunction)."
   }, BaseStyle -> Directive[FontFamily -> "sans-serif"]],
   ImageSize -> 700], "CloudCDF"],
   FileNameJoin[{dir, "index.nb"}],
   Permissions -> "Public"
 ]

Example: https://www.wolframcloud.com/objects/jfklein/directory-index

POSTED BY: Joel Klein
Answer
2 months ago

Wonderful! I'm glad this is up. I don't really care about anything other than static HTML as cloud notebooks are still a bit too slow for me and I don't have want to use cloud credits on APIs or Delayed or anything. But I'm glad this works now.

Has there been any progress on making the path to webpages less nasty? I can now use: https://www.wolframcloud.com/objects/b3m2a1/home which is great, but I'd really much rather drop the put my username in the subdomain path. As it stands I don't think anyone not immersed in Wolfram World would by default believe that URL was attached to me.

POSTED BY: b3m2a1 ​ 
Answer
2 months ago

@b3m2a1 ​  and Joel

I have a question, index.html files are now supported by cloud but I wonder how to use relative sources robustly. Obviously I can't use /assets/logo.png because / refers to cloud base which will almost never be your index.html container.

One could use ./assets/logo.png and it will work when you start your app from {cloudbase}/something/myApp/ (index.html dropped) but the way index.html is supported makes {cloudbase}/something/myApp (without final /) a valid URL too. It will be found but it will be corrupted because lack of / means that ./assets points to /something/assets not /something/myApp/assets

What can one do?

POSTED BY: Kuba Podkalicki
Answer
1 month ago

Has there been any progress on making the path to webpages less nasty?

That's a rather longer-term thing, along with routing your own domain to content hosted in the wolframcloud.com cloud.

POSTED BY: Joel Klein
Answer
2 months ago

Group Abstract Group Abstract