2011-10-23 19 views
1

我已經安裝了以下版本:如何指定我想用於我的Ruby應用程序的瘦Web服務器的版本? - 西納特拉

thin (1.2.11, 1.2.7, 1.2.2) 

但我總想用版本1.2.2

如何指定?

正在使用Sinatra。

這就是我如何運行我的網站:

ruby app/website/website.rb

我最終希望能夠顯式地使用薄這樣的:

thin start -R apps/website/website.ru -d所以我如何指定的Thin版本是那裏用過嗎?

當我運行的第一個命令,我看到:

== Sinatra/0.9.2 has taken the stage on 4567 for development with backup from Thin 
>> Thin web server (v1.2.11 codename Bat-Shit Crazy) 

所以我知道這是沒有使用正確的版本1.2.2

+1

好奇,但你爲什麼要使用1.2.2而不是最新版本? – Nexerus

+0

我工作的網站很挑剔,爲了工作需要精確的寶石版本號。 – marcamillion

回答

3

調用西納特拉應用程序直接

當直接運行西納特拉的應用程序(例如用ruby app/website/website.rb),指定爲要使用的Web服務器內置的服務器,可以使用:server configuration option(薄將被默認使用如果已安裝):

set :server, :thin 

要指定要使用的特定版本,您需要控制裝入哪個gem。執行此操作的最佳方法可能是使用BundlerGemfile,然後在應用程序的早期調用require 'bunlder/setup'

如果你不使用捆紮機,你可以指定在你的應用程序中的gem方法加載該寶石的版本:

gem 'thin', '1.2.2' 

(如果你這樣做require後,荷蘭國際集團的RubyGems使用Ruby 1.8.7或更早版本)。

thin start

開始如果你直接與config.ru文件調用thin,那麼你可以在命令行上你想要的版本:

thin _1.2.2_ start -R config.ru 

(這是任何同寶石二進制:使用_x_作爲第一個參數,將使用版本x

在這種情況下,我認爲你需要明確地使用-R選項 - 它看起來像Thin只會使用thin start時不會自動找到config.ru文件。

如果您已指定要在您的應用程序文件中使用哪個版本,則需要確保在命令行上指定了相同的版本,否則會出現類似can't activate thin-1.2.2, already activated thin-1.2.11 (Gem::LoadError)的錯誤。

如果您決定使用Bundler,則撥打bundle exec thin start將使用您的Gemfile中的版本。

1

如果您使用Bundler,您可以在您的Gemfile中指定版本,然後使用bundle exec thin ...啓動您的服務器。您也可以使用適當的gem可執行文件的完整路徑(您可以使用bundle show <gemname>獲取該路徑)。

如果你沒有Bundler,你可以使用gem which <gemname>

$ `bundle show thin`/bin/thin start 

或:

$ `gem which thin`/../../bin/thin start 

我想你也可以使用猛砸替換,或者您也可以硬編碼無論你使用,你可以執行薄這樣的(非常哈克雖然)

路徑。

+0

不使用捆綁程序...但是當我運行'gem show'時出現此錯誤:'gem show thin 錯誤:執行gem時(RuntimeError) 未知命令顯示' 想法? – marcamillion

+1

對,對不起。這是'捆綁秀'...但你沒有Bundler。 (爲什麼不?) –

+2

試試'gem哪個瘦' – Nexerus