Capistrano Bundle 安装期间无效 Ruby 路径 '//bin/ruby'
Invalid Ruby path '//bin/ruby' during Capistrano Bundle install
我有一个长期存在的 Rails 应用程序在 Ubuntu 上运行在另一个云服务上,但我正在将它迁移到 AWS。
Capistrano 3 部署到目前为止,但它无法安装需要本机构建的 gems,并出现以下错误(这是一个示例)。
我在底部粘贴了完整的错误,但错误的根本原因似乎是用于调用 ruby、
的路径
sh: 1: //bin/ruby: not found
相同的 gem[s] 在 AWS 服务器本地安装时安装正常。
我已经调查并确认通过 ssh 的部署使用的是非交互式 shell,但我正在设置 ruby 路径使用全部三个。bashrc,/etc/environment 并使用,
set :default_env, { "PATH" => "$PATH:/snap/bin" }
...但还是不开心
我怀疑调用 ruby 的路径的形成方式存在问题,因为 //bin/ruby(带有双正斜杠)在语法上对 bash shell.
就好像有一个环境变量应该被设置并插入在那些斜线之间被定义为一个空字符串(或者只是没有定义),但我已经检查了环境变量的非交互性 shell与交互式 shell 相比,在交互式和非交互式 shell 中看起来都一样。
我没有使用 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
好的,我明白是怎么回事了。
使用 Unix 34 年后,我了解到“//”是路径的有效语法,所以这是一个转移注意力的问题。
问题确实是 ruby 可执行文件不在 //usr/bin
我尝试从 ruby 所在的实际路径进行链接,但这只是遇到了 ruby 版本的其他问题(那个老栗子)。
最终 'fix' 是重新开始一个新的 Ubuntu 实例,并使用
安装 ruby
sudo apt install ruby-full
...而不是...
sudo snap install ruby --classic --channel=2.3/stable
...我以前用过。
使用 apt install 将 ruby 置于 /usr/bin 下,一切又恢复正常了。
谢谢。
我有一个长期存在的 Rails 应用程序在 Ubuntu 上运行在另一个云服务上,但我正在将它迁移到 AWS。
Capistrano 3 部署到目前为止,但它无法安装需要本机构建的 gems,并出现以下错误(这是一个示例)。
我在底部粘贴了完整的错误,但错误的根本原因似乎是用于调用 ruby、
的路径sh: 1: //bin/ruby: not found
相同的 gem[s] 在 AWS 服务器本地安装时安装正常。
我已经调查并确认通过 ssh 的部署使用的是非交互式 shell,但我正在设置 ruby 路径使用全部三个。bashrc,/etc/environment 并使用,
set :default_env, { "PATH" => "$PATH:/snap/bin" }
...但还是不开心
我怀疑调用 ruby 的路径的形成方式存在问题,因为 //bin/ruby(带有双正斜杠)在语法上对 bash shell.
就好像有一个环境变量应该被设置并插入在那些斜线之间被定义为一个空字符串(或者只是没有定义),但我已经检查了环境变量的非交互性 shell与交互式 shell 相比,在交互式和非交互式 shell 中看起来都一样。
我没有使用 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
好的,我明白是怎么回事了。
使用 Unix 34 年后,我了解到“//”是路径的有效语法,所以这是一个转移注意力的问题。
问题确实是 ruby 可执行文件不在 //usr/bin
我尝试从 ruby 所在的实际路径进行链接,但这只是遇到了 ruby 版本的其他问题(那个老栗子)。
最终 'fix' 是重新开始一个新的 Ubuntu 实例,并使用
安装 rubysudo apt install ruby-full
...而不是...
sudo snap install ruby --classic --channel=2.3/stable
...我以前用过。
使用 apt install 将 ruby 置于 /usr/bin 下,一切又恢复正常了。
谢谢。