Devin, thank you - that was the last bit I needed.

So my complete stack now works. Hurrah! Thanks everyone who helped me.


Undesirable things found:

1. I've not found how to access externals (in this case the database library) without explicitly setting the 'externals' property of the stack to a (generally unreliably) full path before the stack is saved.

2. revGetDatabaseDriverPath crashes the app if invoked before using revSetDatabaseDriverPath

3. revSetDatabaseDriverPath is required even when the drivers are in the standard location inside the app 'bundle'.

I'll report (2) and (3) formally when I've done a bit more investigation. I'd still love to know what I'm doing wrong, in relation to (1).

thanks all,

Ben

On 01/02/2021 21:48, Devin Asay via use-livecode wrote:
Ben,

I have seen the “invalid database type” error on Linux because of a case error. 
Make sure you use “mysql” as the database type, not “MySQL” or anything else 
with upper case letters. LiveCode is not case-sensitive, but Linux is.

Hope this helps.

Devin

On Feb 1, 2021, at 2:32 PM, Ben Rubinstein via use-livecode 
<use-livecode@lists.runrev.com> wrote:

Update. I have managed to get access to the Rev database external by explicitly 
setting the `externals` property of the stack before saving it (on Mac) to the 
full path on the linux machine to `revdb.so`.

Consequently the functions such as `revOpenDatabases` and `revOpenDatabase` no 
longer throw error 219. Hurrah. Indeed `externalCommands` and 
`externalFunctions` now list all the expected commands and functions of the 
database library.

This is obviously an appalling solution, since it relies on me knowing the 
exact path to the LiveCode bundle on the destination machine. (My recollection 
from a decade or so ago is that this property has to already be set at the time 
that the stack is opened, i.e. it can't be set dynamically. This may be 
erroneous.) However, it will get me going for now.

Now my issue is that when the code tries to open the database, `revOpenDatabase` returns 
"revdberr,invalid database type". That suggests that the drivers aren't found.

I've tried to get past this using `revSetDatabaseDriverPath`.

The documentation says
Use the revSetDatabaseDriverPath command if you want to place the database
drivers your application uses somewhere other than the same folder as the
application.
In fact the drivers are in the standard location, so this shouldn't be needed, 
but hey... I started by reporting `revGetDatabaseDriverPath` - but calling that 
causes LiveCode to immediately exit on signal 11. (This was in a try-catch 
block, but that doesn't stop it crashing out.)

However, after using `revSetDatabaseDriverPath`, `revGetDatabaseDriverPath` no 
longer crashes but faithfully reports the value set.

Unfortunately, this doesn't seem to help - although "set the defaultFolder to 
revGetDatabaseDriverPath()/put the files" does list the folder which includes dbmysql.so - 
revOpenDatabase still returns "revdberr,invalid database type".

Any suggestions gratefully received!

Ben


On 01/02/2021 20:24, Ben Rubinstein via use-livecode wrote:
Hi Mark,
"error in function handler" is a pretty generic response - sort of the
engine's version of ¯\_(ツ)_/¯. Is the MySQL database local to the server
machine or on a different computer?
I should point out that this error is thrown - I take it to mean that the 
function isn't even located. I don't think the problem is with the details of 
the database connection, I don't think it gets that far.
To test this, I've added a call to revOpenDatabases before doing anything else 
- sure enough, this throws the same error.
Does this work locally before moving the
stack to the headless linux box?
The whole shebang works on my Mac. I tried to see if I could run LiveCode 
headless on Mac, to minimise the differences that might be at issue, and got
     Startup error - cannot run in command line mode
I don't know if that's a generic issue that LiveCode can't run headless on Mac, 
or if there's something else going on there.
Ben
On 01/02/2021 19:37, Mark Wieder via use-livecode wrote:
On 2/1/21 11:15 AM, Ben Rubinstein via use-livecode wrote:

With thanks to friends here who helped me install and start using LC on a 
headless Linux box. I've now another little problem... my stack tries and fails 
to connect to a MySQL database.

When it attempts to call revOpenDatabase, it throws error 219, "error in function 
handler". I take it that this means it can't find or hasn't loaded the revdb 
external.

I've installed livecodecommunity-9.6.1.x86_64, and I launch it with
    ~/.runrev/components/livecodecommunity-9.6.1.x86_64/LiveCode\ Community.x86_64 
-ui <mystack.livecode>

I can see revdb.so and dbmysql.so are in the Externals directory. Is there 
something explicit I need to do to load these?

"error in function handler" is a pretty generic response - sort of the engine's 
version of ¯\_(ツ)_/¯. Is the MySQL database local to the server machine or on a different 
computer? Does this work locally before moving the stack to the headless linux box?

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Devin Asay
Director
Office of Digital Humanities
Brigham Young University

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to