Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to setup mod_lua in Apache to access third party Lua modules?

I'm attempting to set up mod_lua module for Apache, but have encountered difficulty regarding accessing third party Lua modules. Say I have a hello_world.lua in Apache's htdocs folder that has something like this:

require "apache2"

function handle(r)
  r.content_type = "text/html"
  r:write "Hello World from <strong>mod_lua</strong>."
  return apache2.OK
end

And I go to "http://localhost/hello_world.lua", that will function as expected. But if I try to add a line such as:

require "socket"

Or

require "cgilua"

I get the following output:

Error!

attempt to call a nil value

However, some modules do work, such as:

require "base"

That functions as expected.

If I navigate to base.lua in the filesystem (c:\program files\lua\5.1\lua\base.lua) and remove this file, then attempt to run my script I get the same error as stated above. So this must be the directory that mod_lua is checking for modules. Modules dlls are not in this folder, instead they are in c:\program files\lua\5.1\clibs\, which I set up the environment variable LUA_CPATH to point to.

Luasocket and cgilua are both present in this folder, yet they cause an error when I try to require them in my script.

From what I can gather, it works fine with any pure lua modules, but anything that has cmodules as well (socket, etc) causes problems.

Additional info:

  • OS: Windows 7 Home Premium
  • LUA_PATH = c:\program files\lua\5.1\lua\
  • LUA_CPATH = c:\program files\lua\5.1\clibs\
  • Apache version: 2.2.22
  • mod_lua version: http://www.corsix.org/content/mod-lua-win32#comment-3214

What needs to be done to be able to require modules in scripts run by mod_lua?

like image 361
gastrop0d Avatar asked Mar 14 '12 06:03

gastrop0d


1 Answers

It looks like you need to add LuaPackageCPath and/or LuaPackagePath directives to your site configuration (in the global configuration file, or .htaccess, ...).

In your case, I'd assume that

LuaPackagePath c:\program files\lua\5.1\lua\
LuaPackageCPath c:\program files\lua\5.1\clibs\

should do the trick.

like image 183
kartben Avatar answered Oct 21 '22 15:10

kartben