Realm Not Working with Packaged Electron App

This is crossposted from this StackOverflow post.

I’ve started the Realm-provided realm-electron-advanced-quickstart found here.

Everything works fine when running in dev, but when I package this with electron-builder, the app does not work. I moved createWindow() to the top of the app.whenReady() function so I could see the debugger, and it showed the following message:

Failed to open realm: Error: illegal operation on a directory
    at run (renderer.js:26)
    at renderer.js:39

Line 26 is

const realm = new Realm(config);

I suspect this is some sort of path/permissions issue with the .realm file.

In main.js , I changed the path in the realm config to

path.join(app.getPath("home"),"my.realm")

But I could not do so on renderer.js .

I’m running Node v14.15.4.

I would appreciate any ideas or examples of how this has been implemented before. I could not find any official guidance on the support docs about how .realm files should be handled in packaged apps. It would be great if the readme on realm-electron-advanced-quickstart explained best practices for packaging the app.

Thanks!

Hi Sam. Welcome to the forum! :slight_smile:

Just wanted to make sure you know that Realm Studio is an open source electron app using the Realm JS SDK: https://github.com/realm/realm-studio … perhaps you can find some inspiration in that.

More specifically you might be interested in the code that changes the current working directory of the renderer process to be a sub-directory of the userData directory: https://github.com/realm/realm-studio/blob/master/src/utils/process-directories.ts#L26-L49 … Realm Studio does this, since opening a synced Realm will create a directory named mongodb-realm (or realm-object-server pre v10 of the SDK) relative to the current working directory, containing metadata about the currently authenticated users.

2 Likes

Hi Kræn,

Thanks a bunch for that resource. I changed the working directory to userData, and that solved the problem.

I noticed that in the Realm Studio example, the main process and renderer processes each use a separate directory, and thus use separate .realm files. Does this approach have any advantages over having the main and renderer share a working directory and .realm file? It seems like it would be inefficient to have the same data stored in two places.