2016-07-29 104 views
1

如果我有file.rb在irb中需要時如何執行某些文件?

puts "Hello, World" 

然後在IRB類型:

require "./file.rb" 

輸出將Hello, World

爲什麼然後,如果我有一個sinatra文件,例如

require "sinatra" 
get "/" do 
    return "Hi" 
end 

並要求沒有輸出?

澄清

通過什麼執行ruby sinatra_app.rb的西納特拉文件就會啓動一個機架服務器,而不會停止,直到按下CTRL + C。爲什麼在irb中不需要這樣做,但是當它明確運行於ruby sinatra_app.rb時,它確實會這樣做?

+0

您在上一個代碼示例中拼寫錯誤「sinatra」。 – teksisto

回答

1

因爲腳本不輸出任何東西。您所展示的腳本中沒有任何內容會生成任何類型的輸出,但沒有任何文件對任何文件調用print,putsp,沒有write

require d時,第一個腳本會打印某些內容,因爲它會打印某些內容,因此第二個腳本將在required之間打印任何內容,因爲它沒有打印任何內容。從第一個腳本中刪除對puts的呼叫,它也不會打印任何內容。給puts添加一個電話給第二個腳本,它會打印一些東西。

+0

絕妙的答案。 – mudasobwa

+1

但是爲什麼不啓動服務器,與運行'ruby app.rb'相同? – thesecretmaster

+0

通常情況下,腳本會啓動服務器,而不會執行任何操作。 – thesecretmaster

0

解決方法是在需要文件之前需要sinatra。

Root文件:

require "sinatra" 
require "/tmp/ddd.rb" 

所需文件:

get "/" do 
    return "Hi" 
end 

我想這是某種聯繫西納特拉啓動過程。他們將get方法放在默認名稱空間中,而不用命名空間來分隔模塊。

+0

這不是一個真正的答案。我已經可以猜到它與sinatras安裝過程有關,但我在問具體如何。 – thesecretmaster

相關問題