我安装了以下版本:
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
。
答案 0 :(得分:3)
直接运行Sinatra应用程序(例如使用ruby app/website/website.rb
)时,要指定要用作内置服务器的Web服务器,请使用:server
configuration option(如果是,则默认使用Thin已安装):
set :server, :thin
要指定要使用的特定版本,您需要控制加载哪个gem。最好的方法是将Bundler与Gemfile
一起使用,然后在应用中尽早致电require 'bunlder/setup'
。
如果您没有使用Bundler,则可以使用应用中的gem
方法指定要加载的gem版本:
gem 'thin', '1.2.2'
(如果您使用的是Ruby 1.8.7或更早版本,请在 require
rubygems之后执行。
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替换,或者您可以对路径进行硬编码。