Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 什么决定了gems的安装位置?_Ruby_Rubygems - Fatal编程技术网

Ruby 什么决定了gems的安装位置?

Ruby 什么决定了gems的安装位置?,ruby,rubygems,Ruby,Rubygems,我正在尝试在我的网络主机上设置Sinatra应用程序。我没有在系统范围的路径中安装gems的sudo权限,该路径是/usr/local下的几个子文件夹,但我的应用程序目录中有一个gems文件夹 出身背景 给出了以下定义: GEM\u HOME-“包含主GEM存储库的目录。” GEM_PATH-“除GEM_主目录外,还包含要搜索的GEM存储库的目录的路径列表。该列表应由适当的路径分隔符分隔(例如,Unix上的“:”,Windows上的“;”) 登录时的初始设置 当我第一次用ssh连接到这个we

我正在尝试在我的网络主机上设置Sinatra应用程序。我没有在系统范围的路径中安装gems的sudo权限,该路径是
/usr/local
下的几个子文件夹,但我的应用程序目录中有一个
gems
文件夹

出身背景 给出了以下定义:

  • GEM\u HOME
    -“包含主GEM存储库的目录。”
  • GEM_PATH
    -“除GEM_主目录外,还包含要搜索的GEM存储库的目录的路径列表。该列表应由适当的路径分隔符分隔(例如,Unix上的“:”,Windows上的“;”)
登录时的初始设置 当我第一次用ssh连接到这个web主机时,
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,但我不知道您可以指定安装路径。很好的提示。哦,我没有看到那个答案,因此在重读你的问题后认为我的答案微不足道。哦,我没有看到那个答案,因此在重读你的问题后认为我的答案微不足道。