我有一个长期运行的Rails应用程序,该应用程序可以在Ubuntu上的另一个云服务上运行,但是我正在将其迁移到AWS。
到目前为止,Capistrano 3部署已经完成,但是安装需要本地构建的gem失败,出现以下错误(这是一个示例)。
我在底部粘贴了完整的错误,但根本原因错误似乎是用于调用ruby的路径,
sh: 1: //bin/ruby: not found
当将相同的gem本地安装在AWS服务器上时,安装得很好。
我已经进行了调查,并确认通过ssh进行的部署使用的是非交互式shell,但是我正在使用.bashrc,/ etc / environment的所有三个并使用来设置ruby路径,
set :default_env, { "PATH" => "$PATH:/snap/bin" }
...但仍然没有喜悦。
我怀疑调用ruby的路径的形成方式存在问题,因为// bin / ruby(带有双正斜杠)在语法上对bash shell不正确。
好像应该设置一个环境变量并将其插入那些斜杠之间定义为一个空字符串(或只是未定义),但是我已经针对交互式外壳检查了非交互式外壳的env vars,并且交互式和非交互式外壳中的外观都相同。
我不使用rvm,因为我不需要,并且除非绝对需要(我不认为应该),否则不希望增加这种复杂性。
关于为什么用该无效路径调用ruby的任何想法?
完整的错误详细信息,用于上下文和参考
An error occurred while installing mysql2 (0.3.21), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.3.21' --source 'https://rubygems.org/'`
succeeds before bundling.
In Gemfile:
mysql2
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory:
/home/rails/myrailsapp/deployonaws/shared/bundle/ruby/2.3.0/gems/therubyracer-0.12.3/ext/v8
//bin/ruby -r ./siteconf20190520-13147-dgcr4x.rb extconf.rb
sh: 1: //bin/ruby: not found
extconf failed, exit code 127
答案 0 :(得分:0)
好,我知道发生了什么事。
使用Unix 34年后,我了解到'//'是路径的有效语法,所以这是一条红色的鲱鱼。
问题实际上是ruby可执行文件不在// usr / bin
中我尝试过从红宝石所在的实际路径进行链接,但这只是在红宝石版本(旧栗子)中遇到了其他问题。
最终的“修复”是从一个新的Ubuntu实例重新开始,并使用安装红宝石
sudo apt install ruby-full
...而不是...
sudo snap install ruby --classic --channel=2.3/stable
...我以前使用过。
使用apt install将ruby放在/ usr / bin下,一切都恢复正常。
谢谢。