2010-02-23 60 views
0

我需要分發一些關閉源的Erlang代碼給客戶端。我認爲最簡單的方法是簡單地給一個Erlang shell命令從遠程主機提取代碼。遠程主機將是一個Erlang VM,它不會與客戶端共享相同的祕密cookie。我怎樣才能做到這一點?是否有Erlang命令從遠程存儲庫讀取BEAM文件?

例如,如果我在二郎殼,我想的東西那是讓我做的事:

load_lib(mysql). 
load_lib(postgres). 

:然後二郎會下載並安裝BEAM文件,並允許我使用MySQL的:和Postgres:從這一點上Erlang的模塊

更新: 1) 我一直在建議使用tar包,所以我想在這種情況下,程序會是這樣的:

Find Erlang lib directory and CD to it 
wget tarball to the current directory 

不如寶石安裝好,但它是Erlang能做的最好的

+0

你讓我失望了一下。你能澄清嗎? – 2010-02-23 11:58:44

+0

我已添加說明 – Zubair 2010-02-23 12:06:01

+0

爲什麼不將代碼包含在發送給客戶端的tar包中? – Christian 2010-02-23 15:01:42

回答

1

你不能在兩個不可信的Erlang節點之間做到這一點。該祕密cookie是節點之間存在的唯一安全措施。您將需要推出自己的協議,即使它只是簡單的HTTP。

你從那一刻開始可以做的是通過網絡發送一個BEAM文件,或者只發送一個包含在其中的二進制數據。然後,您可以通過調用code:load_file/1爲BEAM或code:load_binary/3加載模塊來獲取二進制數據。

雖然這一切聽起來都比較脆弱。 Roberto Aloi建議的存儲庫可能是最好的主意。

+0

因此,基本上不可能實現像gem這樣的東西:在Erlang上安裝你的意思?爲什麼這比tarball想法更脆弱? – Zubair 2010-02-23 15:33:00

+0

我不知道gem:install是如何工作的(從來沒有用過),但是從文檔中可以確定的是,它不會將虛擬機的兩個實例直接與虛擬機的本地分佈機制連接在一起。它似乎去存儲庫(可能與URL和一個給定的協議上的一切)來獲取文件並將它們轉儲到您的計算機上。 這主要是對您的虛擬機到虛擬機概念的回覆。沒有什麼會阻止你從任何意義上抓取文件並將它們放在可搜索的路徑中。以這種方式連接兩臺遙遠的虛擬機(沒有cookie)並不是最好的計劃。 – 2010-02-23 16:06:53

+0

還要添加更多內容,使用代碼:load_binary/3可能允許您從任何資源獲取二進制數據並將其加載到Erlang VM中,而不保存任何文件。一旦虛擬機重新啓動/關閉,一切都消失了。這可能是一個有趣的選擇,但這對我來說聽起來特別脆弱。 – 2010-02-23 16:08:12

1

難道你不能簡單地上傳你的代碼到某個存儲庫並提供對客戶端的訪問嗎? 你也可以提供一個腳本來自動加載新版本的代碼而不停止現場系統......或者我錯過了什麼?

相關問題