2013-10-30 98 views
0

我嘗試構建一個html頁面,其中可以通過rubyscript文件修改innertextxt。 rubyscript永久運行,並且html頁面具有自動刷新(每隔幾分鐘),以便其內容正在改變。在html頁面上也是一個按鈕,在ruby腳本文件中調用某個方法。從html文件中調用ruby方法

現在我的ruby腳本加載html頁面,進行一些更改並保存文件。刷新後,html頁面上的內容被更改。

require 'nokogiri' 
require 'rubygems' 

def currentTime 
    doc = Nokogiri::HTML(File.open("Path/to/index.html")) 
    doc.xpath("//*[@id='time']").inner_html = "#{Time.now}" 
    sleep 10 
    File.open("Path/To/index.html", 'w+') {|f| f.write(doc) } 
end 

def main 
    while true 
     currentTime() 
    end 
end 

main() 

我不認爲這是應該做的正確方法,以及如何我可以通過點擊頁面上的按鈕直接調用currentTime的()?

+2

使用適當的網絡服務器/網絡框架設置。 Sinatra是輕量級框架之一。 –

+0

我希望塞爾吉奧是正確的,但是你能否澄清你是否打算最終制作網絡服務或網頁,並且正在小步學習?或者你有這個HTML的不同目的?通常,網頁上的按鈕與服務器端代碼(如Ruby)之間的連接不是直接的,在開始有意義之前,您需要添加更多的組件。 –

+0

目標是創建一個顯示我們web-api狀態的網站(有些像這樣的https://dev.twitter.com/status)。我們將使用亞馬遜雲作爲webhoster。 – user2211703

回答

0

使用本地文件和代碼的瀏覽器的行爲與更完整的Web服務有一些差異。這些差異之一是你沒有簡單的方法來觸發服務器端代碼,因爲沒有服務器。您的下一步應該是在Web服務器環境中重新實現您的HTML生成,而不是寫入文件。

我推薦Sinatra用於您的第一個Web服務,雖然Ruby on Rails也是一個流行的選擇,但是這裏有太多的代碼要顯示。這是你的代碼轉移作爲-是一個西納特拉應用:

app.rb

require 'sinatra' 
require 'nokogiri' 

get '/main' do 
    doc = Nokogiri::HTML(File.open("Path/to/index.html")) 
    doc.xpath("//*[@id='time']")[0].inner_html = "#{Time.now}" 
    doc.to_s 
end 

如果你運行這個例如那麼Sinatra將自動啓動一個本地開發Web服務器,並且您可以將您的Web瀏覽器指向類似http://127.0.0.1:4567/main(Sinatra告訴您啓動Web服務器時使用哪個端口)的地址。現在,您只需刷新瀏覽器中的頁面即可獲得最新的時間。

這只是一個開始。有很多技術可以進一步學習和決定。例如,使用Nokogiri解析HTML和交換值是非常低效的,您可能需要使用模板引擎,例如erb