It’s been a very busy first half of the year at BKeeney Software. We’ve just finished up three medium sized web apps. One was deployed to Windows Server, one deployed to a Linux web server, and the last to Xojo Cloud. We’ve done a couple of small web apps to a Xojo friendly host too. I will describe our experiences below.
The first project was a CRM project where we converted a really old MS Access and ACT! system to Xojo. The UI wasn’t all that complicated but the data conversion was a pain since it was so dirty. We ended up using a MySQL database server.
Since we didn’t want to go through the hassle of getting an IIS server we made the decision to deploy as a standalone app. The hardest part of the whole installation was figuring out how to create the service. We ended up using NSSM – the Non-Sucking Service Manager http://www.nssm.cc to create the service. After that, installation and updates were a breeze by simply stopping the service, changing the files, and restarting the service. We are able to VPN into the server and copy the necessary files over.
The server was virtual and running on a VMWare server. Despite our specifications the server was set up initially with a single core (virtual) processor. Performance all the way around sucked. We complained, the client complained, and as soon as they upped it to dual core processors (as we specified) everything went smoothly after that.
The second project was another CRM-type project though a little smaller. It was using an SQLite database. We converted the data from a FileMaker database. The data was much cleaner and more straightforward so it was a relatively easy transition.
The client decided to host on Xojo Cloud so deployment is done from with the Xojo IDE. The only file we didn’t deploy via the IDE was the database itself which we transferred via SFTP to the appropriate shared document directory on the Xojo Cloud server.
Xojo Cloud, for the most part, works flawlessly. There have been occasions, however, where it fails to upload properly. It’s a frustrating experience, to be sure, but Xojo customer service has always been able to fix it. When it happens on a weekend you’re kind of out of luck. Here are a couple of suggestions to try and get around the issue: 1) Restart your server via the Xojo control panel. 2) Change the application ID of your application and try uploading again.
Our third application has been around a while but we switched over from using SQLite to MySQL after our little db reached about three and half million rows in single table. It still worked but some of the queries were taking *minutes* to complete. The decision to move over to MySQL wasn’t a hard one.
You’d think that updating an existing app would be easy. This one turned out to be anything but easy. Since this one bites a lot of people deploying Xojo web apps to various Linux distorts it’s worth writing them all down.
- Until Xojo web apps are 64 bit you’ll have to make sure the 32 bit compatibility libraries are installed. Each is different so it’s ‘fun’ finding them. Honestly, check on the Xojo forums to see what people have found. Hopefully, this becomes a non-issue with Xojo 2015 R3 being scheduled to compile 64 bit apps.
- Make sure permissions are 775 for all files and directories *including* the overall directory. The latter one has bitten me more than once.
- Make sure permissions for the config.cfg file is 664 or 666 (I’ve seen it both ways and I’ve never had a problem with either one).
- Make sure the owner and group of the files matches that of the system. If you’re FTP client shows owners/groups and it says something like “mixed” you’ve got a problem. You’ll need to figure out how to change the owner/group on your own. This may involved getting SSH access. It may be easier to work through the CPanel File Manager to upload files because you’re guaranteed, then, to have the right owner/group.
- Make sure the .htaccess file has been uploaded. Since it’s a hidden file on Mac OS X it’s easy to miss this one. If you zip the output directory and then upload the zip it will be there automatically. If you’re zipping the contents of the directory don’t forget it!
- Does the server have libicu installed? Xojo 2015 R2 requires libicu and if you don’t have it your app will just crash with maybe an obscure error in the error log like “Can’t find missing file.” I had this happen to me this week and when I reverted to 2014 R2 the app started up right away. If you suspect you’re missing a library and have SSH access, try starting the app via the command line. It will tell you what the missing library is. You don’t always have SSH access so that’s kind of a drag.
Not really an issue with web app deployment, per se, but it’s an issue we deal with quite a bit. MySQL on Mac OS X doesn’t care what the case is of a table or view. tTable (mixed case) is the same as ttable (all lowercase). On Linux and Windows this does not appear to be the case. I know there’s a system variable that can turn this on or off but for this project the client had existing databases on the server and I really didn’t want to muck anything up on them. Many queries that were running great on our local (Mac) system were not on the server. Switching everything to lowercase isn’t a big deal (especially with ActiveRecord) but some db apps this will be a nightmare. So don’t forget to test!
1701 Software Inc. http://www.1701software.com
We have deployed to 1701 Software several times in the past six months for ourselves and for various clients. We’ve found their servers to be Xojo friendly from the get go (not so with most hosts) and their service is excellent. They also offer a number of database options that Xojo Cloud does not like CubeSQL and Valentina in addition to MySQL and PostgreSQL. Frankly, the fact that they are Xojo developers too makes them the top of my list of non Xojo hosting services. Their prices are pretty good too for those that are price conscious.
That is our experience with deploying Xojo web apps in the past six months. When everything works right it’s incredibly easy. When it doesn’t – well, you tend to swear like a sailor. Hopefully you’ll find this guide to be somewhat useful. Anything I forgot?
[Edit: Updated to not include an implied timeframe for the R3 release.]