我正在将rails应用程序部署到服务器。有一些环境限制,即:
服务器上没有Internet访问
服务器上没有根访问权限
没有构建工具(gcc等)
我几乎让capistrano部署工作,但是当bundler尝试安装json gem时失败了:
** [out :: 192.168.7.115] Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
** [out :: 192.168.7.115]
** [out :: 192.168.7.115] /app/ruby/bin/ruby extconf.rb
** [out :: 192.168.7.115] creating Makefile
** [out :: 192.168.7.115]
** [out :: 192.168.7.115] make
** [out :: 192.168.7.115] compiling generator.c
** [out :: 192.168.7.115] make: gcc: Command not found
** [out :: 192.168.7.115] make: *** [generator.o] Error 127
由于没有互联网,我所有的宝石都存储在
vendor/cache
中。我想通过在具有gcc的类似机器上编译json gem来解决这个问题,但是在系统上找不到一个“编译后的”gem。通常,我会看到一个[gemname]-x86_64-linux.gem
gemfile,它表示编译已经完成。似乎找不到json gem的这个,但是如果找到了,我想我可以把它放在vendor/cache
文件夹中,然后一天结束。有什么建议吗?我处理这个问题正确吗?
最佳答案
我不能推荐这种方法,因为它在很多层面上可能是件坏事,但它确实解决了我的问题。我最终将shared/bundle
文件夹从登台服务器复制到生产服务器。bundler看到gems已经安装好了,并且没有尝试重新安装它们。