Ruby 什么决定了gems的安装位置?
我正在尝试在我的网络主机上设置Sinatra应用程序。我没有在系统范围的路径中安装gems的sudo权限,该路径是Ruby 什么决定了gems的安装位置?,ruby,rubygems,Ruby,Rubygems,我正在尝试在我的网络主机上设置Sinatra应用程序。我没有在系统范围的路径中安装gems的sudo权限,该路径是/usr/local下的几个子文件夹,但我的应用程序目录中有一个gems文件夹 出身背景 给出了以下定义: GEM\u HOME-“包含主GEM存储库的目录。” GEM_PATH-“除GEM_主目录外,还包含要搜索的GEM存储库的目录的路径列表。该列表应由适当的路径分隔符分隔(例如,Unix上的“:”,Windows上的“;”) 登录时的初始设置 当我第一次用ssh连接到这个we
/usr/local
下的几个子文件夹,但我的应用程序目录中有一个gems
文件夹
出身背景
给出了以下定义:
-“包含主GEM存储库的目录。”GEM\u HOME
-“除GEM_主目录外,还包含要搜索的GEM存储库的目录的路径列表。该列表应由适当的路径分隔符分隔(例如,Unix上的“:”,Windows上的“;”)GEM_PATH
echo$GEM_HOME
和echo$GEM_PATH
都会生成一个空字符串,但是GEM list
会显示几个GEM
正在尝试更改gem位置
在命令行中,我设置了如下GEM\u HOME
:
GEM_HOME=$PWD/gems # 'gems' folder under present working directory
echo $GEM_HOME # correctly outputs the gem folder I specified
ls $GEM_HOME # shows gems folder contents, namely:
# bin/ cache/ docs/ gems/ specifications/
我还将GEM_PATH
设置到同一个文件夹
执行此操作后,gem list
仍会显示全局gem,而不是指定文件夹中的gem,并且gem install
仍会尝试安装到全局位置
我遗漏了什么?没有用于
gem
的手册页,这并不会让它变得更简单。我假设GEM_PATH
是查找GEM的地方,而GEM_HOME
是安装GEM的地方。试一试
export GEM_HOME = "$GEM_PATH"
没有用于
gem
的手册页,这并不会使它更容易。我假设GEM_PATH
是查找GEM的地方,而GEM_HOME
是安装GEM的地方。试一试
export GEM_HOME = "$GEM_PATH"
使用“导出”
正如塔斯社所显示的那样,export
似乎是缺少的一部分:它使我的本地GEM_HOME
变量成为一个全局变量
以下是我所做的:
export GEM_HOME=$PWD/gems # where to install and look for gems
export PATH=$PWD/gems/bin:$PATH # append the gems' binaries folder to
# the current path, so that I can call
# `bundle install` and have it find
# myapp/gems/bin/bundle
使用“导出”
正如塔斯社所显示的那样,export
似乎是缺少的一部分:它使我的本地GEM_HOME
变量成为一个全局变量
以下是我所做的:
export GEM_HOME=$PWD/gems # where to install and look for gems
export PATH=$PWD/gems/bin:$PATH # append the gems' binaries folder to
# the current path, so that I can call
# `bundle install` and have it find
# myapp/gems/bin/bundle
您也可以使用Bundler。Bundler使管理Gem版本变得非常容易,即使无法访问sudo。在应用程序的根目录中创建一个名为
Gemfile
的文件,并放置如下行:
gem "sinatra"
gem "some_other_gem_dependency"
gem "and_so_on_and_so_forth", ">= 1.0"
然后运行bundle install--path/where/you/want/your/gems/stored
,将gems安装到您可以访问的路径。然后将其放入config.ru中:
require 'rubygems'
require 'bundler'
Bundler.require
require './your_app'
run YourApp
查看更多信息。您也可以使用Bundler。Bundler使管理Gem版本变得非常容易,即使无法访问sudo。在应用程序的根目录中创建一个名为
Gemfile
的文件,并放置如下行:
gem "sinatra"
gem "some_other_gem_dependency"
gem "and_so_on_and_so_forth", ">= 1.0"
然后运行bundle install--path/where/you/want/your/gems/stored
,将gems安装到您可以访问的路径。然后将其放入config.ru中:
require 'rubygems'
require 'bundler'
Bundler.require
require './your_app'
run YourApp
查看更多信息。你能使用rvm吗?在许多情况下,它会让生活更轻松。@3-我确实在开发机器上使用rvm,这可能是我不清楚如何手动操作的原因。然而,在这种情况下,这似乎是矫枉过正。另外,我想了解rvm为我做了什么,所以偶尔自己做一次似乎很好。我要检查的第一件事是它不是一个外壳问题。。。如果要远程处理到外壳上有约束的主机。例如,尝试
GEM\u HOME=$PWD/gems GEM list
。您应该在PWD/gems目录中看到gems列表。如果是这种情况,请尝试导出GEM_HOME=$PWD/gems或将此变量添加到shell的配置文件/导出脚本(.bashrc、.bash_配置文件或其他任何内容)。您能使用rvm吗,在许多情况下都会使生活变得轻松。@3-我在开发机器上使用rvm,这可能是我不清楚如何手动执行此操作的原因。然而,在这种情况下,这似乎是矫枉过正。另外,我想了解rvm为我做了什么,所以偶尔自己做一次似乎很好。我要检查的第一件事是它不是一个外壳问题。。。如果要远程处理到外壳上有约束的主机。例如,尝试GEM\u HOME=$PWD/gems GEM list
。您应该在PWD/gems目录中看到gems列表。如果是这种情况,请尝试export GEM_HOME=$PWD/gems
或将此变量添加到shell的配置文件/导出脚本(.bashrc、.bash_profile或其他任何内容)。我确实在此处找到了这些变量的引用:实际上是另一种方式。我在使用Bundler,但我不知道您可以指定安装路径。很好的提示。我正在使用Bundler,但我不知道您可以指定安装路径。很好的提示。哦,我没有看到那个答案,因此在重读你的问题后认为我的答案微不足道。哦,我没有看到那个答案,因此在重读你的问题后认为我的答案微不足道。