2011-03-01 30 views
2

我正在部署一个使用Capistrano的Rails 3应用程序。我已经在远程服务器(以及本地)上运行了RVM,并且Bundler正在管理我所有的宝石。这里的问题:如果Bundler在非标准路径中安装宝石,我如何访问这些宝石以及它们随附的任何二进制文件?

当我部署,下面的命令是由Capistrano的运行:

bundle install --gemfile /var/www/releases/20110301225633/Gemfile --path /var/www/shared/bundle --deployment --quiet --without development test 

所以,我所有的宝石都在/var/www/shared/bundle,没关系。但是,这意味着系统路径中没有安装任何宝石(即运行gem list不会返回任何内容),所以我不能使用任何可能与这些宝石一起提供的bin文件,包括rails命令本身。我已经能够获得Web服务器(瘦)的唯一方法是手动gem install thin。一旦打包完成,它就会启动Rails,包括所有必需的宝石。

那么,我如何才能访问我的正在运行的应用程序之外的那些宝石?我知道我不应该手动安装任何东西来让这个工作,但我不知道我错过了什么。我尝试过运行rvm-shell '[email protected]' -c 'thin start',但是我试图直接从命令行调用thin start时遇到同样的错误:bash: thin: command not found即使直接进入bundler的bin目录/var/www/shared/bundle/bundle/ruby/1.9.1/bin以开始瘦也会给我带来同样的错误。

我觉得RVM应该照顾这个对我来说......也许有一个我失踪的环境变量?

感谢您的帮助!

回答

5

捆绑背后的想法是,它会安装您的项目需要的宝石的本地副本,而不会影响系统级的宝石。

如果你想完全访问rails应用以外的东西,你需要手动gem install它。

但是,如果你想你的项目中运行的宝石bin文件(例如,您Gemfile中有gem "thin"并希望能够为这个项目运行thin start),你可以使用bundle exec它“会运行捆绑版本:

bundle exec thin start 
+0

谢谢,我只是看到这个答案之前发现这一点吧! – 2011-03-02 00:05:26

0

我更喜欢使用:

bundle install --path binpaths