[Lua] 使用 LuaRocks 安裝 socket 模組
想用 Lua 寫一個查詢網站是否健康的程式,
但 Lua 本身並不支援網路連線,
得先安裝 LuaRocks 這個套件管理器,
再用它來安裝 socket 套件才行~
執行下面的指令,來安裝 LuaRocks:
wget https://luarocks.org/releases/luarocks-3.3.1.tar.gz tar zxpf luarocks-3.3.1.tar.gz cd luarocks-3.3.1 ./configure && make && sudo make install
基本上,上面的編譯應該也都不會遇到什麼問題。
問題在於接下來,使用 luarocks 指令安裝 socket 套件…
指令很簡單,執行 sudo luarocks install luasocket 就行:
testuser@localhost ~/luarocks-3.3.1 $ sudo luarocks install luasocket ...... No existing manifest. Attempting to rebuild... luasocket 3.0rc1-2 is now installed in /Users/testuser/luarocks-3.3.1/./lua_modules (license: MIT)
不過這裡有一個雷,待會再提…
LuaRocks 看似裝好了 luasocket,
但是在 Lua 裡面,卻無法使用 require “socket” 敘述來匯入 socket 模組,
說找不到這個模組:
testuser@localhost ~/luarocks-3.3.1 $ lua Lua 5.4.1 Copyright (C) 1994-2020 Lua.org, PUC-Rio > require "socket" stdin:1: module 'socket' not found: no field package.preload['socket'] no file '/usr/local/share/lua/5.4/socket.lua' no file '/usr/local/share/lua/5.4/socket/init.lua' no file '/usr/local/lib/lua/5.4/socket.lua' no file '/usr/local/lib/lua/5.4/socket/init.lua' no file './socket.lua' no file './socket/init.lua' no file '/usr/local/lib/lua/5.4/socket.so' no file '/usr/local/lib/lua/5.4/loadall.so' no file './socket.so' stack traceback: [C]: in function 'require' stdin:1: in main chunk [C]: in ?
找了半天,後來終於發現地雷…
我原本是在解開 luarocks-3.3.1.tar.gz 的目錄 (luarocks-3.3.1) 下,
執行 luarocks install luasocket,但這會讓 luarocks 搞不清楚狀況,
它可能把那個目錄當成了 LuaRocks 安裝好的系統目錄,
所以把 luasocket 裝到那個目錄下的 lua_modules 子目錄下了…
要解決這個問題也很簡單,
到別的目錄去 (像 ~ 家目錄或是 / 根目錄),不會讓 LuaRocks 搞混的地方,
再執行一次 sudo luarocks install luasocket。
這次裝好之後,Lua 裡就可以成功匯入 socket 模組囉:
testuser@localhost ~ $ lua Lua 5.4.1 Copyright (C) 1994-2020 Lua.org, PUC-Rio > require "socket" table: 0x7fe1bb004130 /usr/local/share/lua/5.4/socket.lua
(本頁面已被瀏覽過 1,109 次)