6

我一直在尝试在 EC2 实例上部署我的 rails 应用程序。我已经采取的步骤是

本地:

  1. 我通过写入Gemfile和安装了所有的宝石bundle install

    group :development do
      gem 'capistrano'
      gem 'capistrano3-puma'
      gem 'capistrano-rails', require: false
      gem 'capistrano-bundler', require: false
      gem 'capistrano-chruby'
    end
    
  2. 我编辑了我Capfile的需要模块

    require "capistrano/setup"
    require "capistrano/deploy"
    require "capistrano/scm/git"
    install_plugin Capistrano::SCM::Git
    require "capistrano/chruby"
    require "capistrano/bundler"
    require "capistrano/rails/assets"
    require "capistrano/rails/migrations"
    require "capistrano/puma"
    Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
    
  3. 我也做了必要的改变config/deploy.rb,特别是

    set :chruby_ruby, 'ruby-2.3.0'
    

在服务器/实例上:

  1. 安装红宝石
  2. 安装 Chruby 并包含在/etc/profile.d/chruby.sh这些中:

    source xx/xx/xx/chruby.sh
    source xx/xx/xx/auto.sh
    
  3. 为 app 创建了一个文件夹,还创建database.ymlapplication.yml.

完成所有这些后,当我运行时cap production deploy,它开始检查和 git 克隆以及链接文件和目录但失败bundler:install,给出一个错误,如

01 /usr/local/bin/chruby-exec ruby-2.3.0 -- bundle install --path /home/deploy…
01 /bin/sh: 2: /etc/profile.d/chruby.sh:
01 source: not found
01
01 /bin/sh: 3: /etc/profile.d/chruby.sh:
01 source: not found
01
01 /bin/sh: 1:
01 chruby: not found
01

由于只有使用 RVM 或 JRuby 将 Rails 部署到 AWS 的示例,因此我无法弄清楚我哪里出错了。

4

2 回答 2

4

从表面上看,问题出在“/bin/sh”上,它不支持“source”。

使用 'bash' 时,source 是 '.' 的别名。命令。目前尚不清楚系统上的默认“/bin/sh”是什么。如果是 /bin/dash (Mint 19) - 你将不得不用 . 替换每个源代码。

. xx/xx/xx/chruby.sh
. xx/xx/xx/auto.sh

您可能必须对可能使用“源”的引用文件(/etc/profile.d/*.sh)进行类似的修复。

更新 1 假设 '/bin/ls' 是破折号(见鬼readlink -f /bin/sh,它将显示 /bin/dash 或其他 *sh 程序)。如果使用 'dash',可以alias在检查是否在 dash 下运行后在 /etc/profile 中进行设置。理论上,将允许使用“源”的脚本无需更改即可工作。

case "$(readlink -f /proc/$$/exe)" in
    */dash) alias source=. ;;
esac
于 2019-11-13T16:54:55.040 回答
0

我同意破折号

但我还有另外一种情况

  1. 在 chruby-exec 中添加 shebang

  2. export SHELL=/bin/bash

github 上的 chruby-exec 源代码中

最后一行是

exec "$SHELL" "${shell_opts[@]}" -c "$command"

所以环境变量SHELL在这里起着重要的作用。

@alchemist95 你能检查一下 chruby-exec 的第一行吗

您似乎在 chruby-exec 上有旧版本,因为 此提交确保 chruby-exec 在 bash 下运行。已于 2013 年添加。

于 2019-11-20T07:19:20.757 回答