Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
在不使用git或internet访问的情况下部署Ruby gem local_Ruby_Git_Deployment_Bundler - Fatal编程技术网

在不使用git或internet访问的情况下部署Ruby gem local

在不使用git或internet访问的情况下部署Ruby gem local,ruby,git,deployment,bundler,Ruby,Git,Deployment,Bundler,有没有一种方法可以在不访问internet的情况下分发Ruby gem,而只是捆绑安装在开发人员pc上的gem 这是为了在我们的组织内部部署,对互联网的访问受到严格限制。所有电脑都运行Windows7和Ruby1.9.3以及Bundler 1.11.2 我对git或bundler没有什么经验。 Rails没有被使用,但一些其他的gem,比如activerecord和logger也被使用 我尝试的是: 我用我的rb创建了一个文件夹。脚本和一个带有所需gem的.gemspec文件,然后我执行了bun

有没有一种方法可以在不访问internet的情况下分发Ruby gem,而只是捆绑安装在开发人员pc上的gem

这是为了在我们的组织内部部署,对互联网的访问受到严格限制。所有电脑都运行Windows7和Ruby1.9.3以及Bundler 1.11.2

我对git或bundler没有什么经验。 Rails没有被使用,但一些其他的gem,比如activerecord和logger也被使用

我尝试的是: 我用我的rb创建了一个文件夹。脚本和一个带有所需gem的.gemspec文件,然后我执行了
bundle gem name\u of\u gem\u我希望\u制作
,但得到了一个错误
Errno::enoint:没有这样的文件或目录-git config user.name
。 在过去,我创建了一个git帐户并做了一些实验,但我不想使用它

在过去,我尝试使用jRuby和Warble来制作JAR,但在本例中,我希望使用MRI Ruby

我的dev pc上有internet连接,但我想部署脚本的一些pc或服务器——更重要的是它们所依赖的gem——没有。 不过,Ruby在任何地方都可以安装

我想用一种简单的方法从我的开发pc收集所有需要的文件,并将它们传输到目标pc。 我可以压缩我的Ruby文件夹并将其解压缩到其他地方,但是我有很多不需要的文件

你能给我需要使用的命令吗?或者给我一个网站来解释如何做到这一点?我在网上读了很多关于bundler的文章,但没有找到这种工作方式。 无法想象其他开发人员没有相同的问题,并且有一个共同的解决方案

编辑:

我通过执行
gem build mygem.gemspec
创建了一个gem,但是它只有我自己的脚本,没有必需的gem

编辑:按照米海的建议,删除了以前的尝试

创建一个子文件夹vendor/gems并将2个gems文件复制到那里

现在,我可以使用以下文件执行
捆绑包包
捆绑包安装--无需部署

gem 'active_record', '4.1.1', :path => 'vendor/gems'
gem 'logger', '1.2.8', :path => 'vendor/gems'

现在的问题:如何将其部署到另一台pc上?复制文件夹中的所有内容,并在目标pc上执行
捆绑安装--local
?或者有没有一种方法可以将所有东西捆绑到gem中,以便在目标pc上执行
gem安装mygem--local
?gem build mygem不包含捆绑包中的任何内容。

您可以通过两种方式来实现

a)缓存()项目的
供应商/Cache
文件夹中的宝石

bundle package
这将生成/更新
Gemfile.lock
并将所有gem本地复制到项目的
vendor/cache
文件夹中。然后可以将项目文件复制到服务器并运行

bundle install --local # translates to pick my gems from vendor/cache
b)使用自定义路径,通常位于项目外部

捆绑安装
支持本地路径

gem install --local path_to_my_gem/my_gem.gem
--local
标志是可选的,但在这种情况下很有用,因为它跳过了在通常的远程存储库中的查找

随后,还可以在文件中指定路径

gem "my_gem", path: "path_to_my_gem/my_gem.gem"

Mihai的解决方案结合了本地gem文件夹和--no部署选项,在某种程度上起作用,但存在一些问题: -在目标pc上,您需要先使用本地复制的gem执行
gem安装捆绑程序
,然后对先前制作和复制的软件包执行
bundle安装--local
-对于gems-ruby-oci8和activerecord-oracle\u-enhanced-adapter,我为其他gems提供的解决方案由于某种原因无法工作(与mingw32平台有关)

由于创建和随后安装包的工作以及仍然存在的问题,目前我决定采用良好的旧批处理方法,并制作以下批处理脚本

很明显,这只是windows操作系统,但我认为这很容易成为其他操作系统的适配器

gems是从本地副本安装的,不需要internet连接,也不需要指定activerecord的依赖项,但是gems需要存在

devkit对于i18n和json gem是必需的,它们都依赖于activerecord

这里是我需要的GEM文件列表,它取决于您在dev pc上使用的版本

activemodel-4.1.1.gem
activerecord-4.1.1.gem
activerecord-oracle_enhanced-adapter-1.5.6.gem
activesupport-4.1.1.gem
arel-5.0.1.20140414130214.gem
builder-3.1.4.gem
bundler-1.11.2.gem
i18n-0.7.0.gem
json-1.8.2.gem
logger-1.2.8.gem
minitest-5.3.4.gem
ruby-oci8-2.1.2-x86-mingw32.gem
thread_safe-0.3.4.gem
tzinfo-1.2.2.gem
您可以在
C:\Rubyxxx\lib\ruby\gems\1.9.1\cache

这是一批

@ECHO OFF
rem in case started as administrator in folder \windows\system32
pushd "%~dp0"

rem check if ruby is installed, if not, start installation
if not exist c:\ruby193 (
  echo Install Ruby 1.9.3 to c:\ruby193
  start /w \\myshare\ruby\rubyinstaller-1.9.3-p551.exe
)

rem check if devkit is installed, if not, copy folder local
if not exist c:\devkit (
  echo Copying devkit..
  md c:\devkit
  xcopy /s \\myshare\devkit c:\devkit
)

echo Adding the DevKit to PATH
set path=c:\devkit\bin;c:\devkit\mingw\bin;%PATH%
rem gems is a folder containing all the gemfiles needed
cd gems
call gem install logger-1.2.8.gem --no-rdoc --no-ri --local
call gem install activerecord-4.1.1.gem --no-rdoc --no-ri --local
call gem install ruby-oci8-2.1.2-x86-mingw32.gem --no-rdoc --no-ri --local
call gem install activerecord-oracle_enhanced-adapter-1.5.6.gem --no-rdoc --no-ri --local
cd ..

不过,我希望有人发布一个捆绑包方法的解决方案(或更好)。

谢谢Mihai,我正在接近解决方案,但没有放弃。请阅读我的编辑并建议下一步怎么做?如果您打包gems,您不应该更改Gemfile路径<代码>捆绑包安装--本地
将自动从
供应商/缓存
中选择它们。捆绑包最终成功,现在查看最后一部分,编辑
捆绑包包
将把所有gem放在项目的
供应商/缓存
文件夹中。因此,您必须将其复制到服务器上,并在其上执行
bundle install--local