如何指定我想用于Ruby应用程序的瘦Web服务器的版本? - Sinatra

时间:2011-10-23 23:04:47

标签: ruby sinatra thin

我安装了以下版本:

 thin (1.2.11, 1.2.7, 1.2.2)

但我总是想使用版本1.2.2

如何指定?

使用Sinatra。

这就是我运行网站的方式:

ruby app/website/website.rb

我最终希望能够像这样明确地使用Thin:

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

2 个答案:

答案 0 :(得分:3)

直接调用Sinatra应用程序

直接运行Sinatra应用程序(例如使用ruby app/website/website.rb)时,要指定要用作内置服务器的Web服务器,请使用:server configuration option(如果是,则默认使用Thin已安装):

set :server, :thin

要指定要使用的特定版本,您需要控制加载哪个gem。最好的方法是将BundlerGemfile一起使用,然后在应用中尽早致电require 'bunlder/setup'

如果您没有使用Bundler,则可以使用应用中的gem方法指定要加载的gem版本:

gem 'thin', '1.2.2'

(如果您使用的是Ruby 1.8.7或更早版本,请在 require ruby​​gems之后执行

thin start

开始

如果您直接使用thin文件调用config.ru,则可以在命令行中指定所需的版本:

thin _1.2.2_ start -R config.ru

(对于任何gem二进制文件都是一样的:使用_x_作为第一个参数,并使用版本x

在这种情况下,我认为您需要明确使用-R选项 - 看起来Thin不会像使用config.ru时那样自动查找thin start文件。< / p>

如果您已在应用文件中指定要使用的版本,则需要确保在命令行中指定相同的版本,否则会出现can't activate thin-1.2.2, already activated thin-1.2.11 (Gem::LoadError)等错误。

如果您决定使用Bundler,则调用bundle exec thin start将使用Gemfile中的版本。

答案 1 :(得分:1)

如果使用Bundler,则可以在Gemfile中指定版本,然后使用bundle exec thin ...启动服务器。您还可以使用相应gem可执行文件的完整路径(可以使用bundle show <gemname>获得)。

如果您没有Bundler,可以使用gem which <gemname>

无论你使用哪种,你都可以像这样执行瘦身(虽然非常hacky):

$ `bundle show thin`/bin/thin start

或:

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

我认为您也可以使用Bash替换,或者您可以对路径进行硬编码。