2015-11-29 48 views
0

我的Laravel項目使用MySQL。我想託管我的項目的演示版本,任何人都可以使用給定的憑證進行登錄,並執行任何允許他的角色進行的操作。當他註銷他所做的更改應該消失。同時,具有相同憑證的多個用戶可以操縱應該隔離的數據,而不必更改爲其他當前的數據庫。我怎樣才能做到這一點?如何設置演示版的MySQL數據庫?

+0

他們會做出什麼樣的改變?如果他們對數據庫中的值進行更改,那麼當他們註銷時,可以截斷這些表並簡單地對它們進行重新排序。 – James

+0

問題是如果我截斷數據庫,然後其他用戶同時登錄會看到不一致的權利? – hash71

+0

是的,他們會。但是,除非你爲每個用戶設置一個環境,否則它們會有不一致。 (例如,如果我刪除了一個用戶,那麼即使您沒有刪除它也會消失) – James

回答

0

您可以編寫一個SQL文件,其中包含「重置」數據庫所需的所有SQL命令。例如,這可以是刪除所有記錄並用「默認」記錄預填充表格。每次用戶註銷時,您都可以觸發該腳本。

聽起來像編寫這樣的腳本會很困難和耗時,但是當您將數據庫「備份」到SQL文件時,大多數SQL客戶端可以爲您生成此類文件(當您備份到SQL文件時,它只是簡單寫入恢復數據庫所需的所有SQL命令)。

我希望這會有所幫助。

+0

例如CodeCanyon中的演示項目,多個用戶可以登錄到演示版本並同時執行一些默認記錄的操作。假設用戶登錄進行更改,註銷然後執行腳本以重置數據庫。但同時其他用戶登錄。當我重置數據庫的唯一版本時,那些用戶會看到什麼? – hash71

+0

是的 - 但通過這種邏輯,用戶將能夠看到其他用戶正在做出的更改。你怎麼預防這個? – JCutting8

+0

每次用戶登錄時都可以創建一個完整的數據庫,然後運行腳本以在註銷時刪除數據庫。這也意味着用戶無法看到其他用戶在做什麼。這可以通過類似的腳本(創建數據庫)來實現,然後使用腳本來結束數據庫。 – JCutting8

0

如果我必須這樣做,我會使用Docker(一種訪問linux容器的簡單方法)。

我想看看提供目標環境的整個堆疊在一個容器中,然後隨機URL提供代理: * .host.domain/ * host.domain // * host.domain:/

您的應用程序環境的副本會在容器中產生,配置爲將其內部端口80/443作爲其他號碼公開,然後您將通過創建虛擬主機/目錄爲用戶提供連接方式代理這個。

這樣,您的應用程序不需要處理任何奇怪的數據庫行/表/端口/名稱更改內部 - 它只需要應付在不同的URL後面運行。

我已經建立了這樣的事情背後nginx的(這讓我加載和卸載代理,而不影響現有會話),交付,否則將來自用戶的數據衝突遭受的應用環境 - 看http://docker.stat.auckland.ac.nz/

在這個例子中,當用戶請求一個實例時,應用程序目錄被安裝在/ srv/shiny /的docker實例中,只讀容器中的端口3838映射到主機上的某個7999 < <。

然後我創建一個模板下面,將其配置在文件夾中的我的nginx服務器讀取:

location /<random instance name>/ 
{ 
    proxy_pass http://localhost:<port>; 
    proxy_redirect http://localhost:<port>/ $scheme://$server_name/; 
} 

並運行「systemctl重裝nginx的」以獲取新的實例後,移交uri回到用戶。

+0

謝謝。這似乎是正確的解決方案。 – hash71