90317
### 前提

RailsアプリケーションのAWSへのデプロイのため、  
<https://qiita.com/take18k_tech/items/5710ad9d00ea4c13ce36#63-capistrano>  
を参考にインフラ環境を構築しています。

●構成  
Ruby 2.6.5 + Nginx + Puma

### 実現したいこと

Capistrano導入中に発生した、  
Capistrano::Puma::Systemdに出るuninitialized constantエラーを解決したい。

### 発生している問題・エラーメッセージ

```

    % bundle exec cap production deploy
    
    (Backtrace restricted to imported tasks)
    cap aborted!
    NameError: uninitialized constant Capistrano::Puma::Systemd
    Did you mean?  SystemExit
    /Users/ユーザー/tech_camp/rails/projects/アプリ/Capfile:43:in `<top (required)>'
    (See full trace by running task with --trace)
    
    
```

### 該当のソースコード

●使用したGem

```

    group :development do
      # 略
      # ***** 以下を追加 *****
      gem "capistrano", "~> 3.10", require: false
      gem "capistrano-rails", "~> 1.6", require: false
      gem 'capistrano-rbenv', '~> 2.2'
      gem 'capistrano-rbenv-vars', '~> 0.1'
      gem 'capistrano3-puma'
      # ***** 以上を追加 *****
    end
    
```

●Gemfile.lock（関係部分）

```

    capistrano (3.17.0)
      airbrussh (>= 1.0.0)
      i18n
      rake (>= 10.0.0)
      sshkit (>= 1.9.0)
    capistrano-bundler (2.1.0)
      capistrano (~> 3.1)
    capistrano-rails (1.6.2)
      capistrano (~> 3.1)
      capistrano-bundler (>= 1.1, < 3)
    capistrano-rbenv (2.2.0)
      capistrano (~> 3.1)
      sshkit (~> 1.3)
    capistrano-rbenv-vars (0.1.0)
      capistrano (>= 3.0)
      capistrano-rbenv (>= 2.0)
    capistrano3-puma (3.1.1)
      capistrano (~> 3.7)
      capistrano-bundler
    
```

●問題の発生しているソースコード（Capfile）

```

    ・・・
    
    require 'capistrano/rbenv'
    require 'capistrano/bundler'
    require 'capistrano/rails/assets'
    require 'capistrano/rails/migrations'
    require 'capistrano/puma'
    install_plugin Capistrano::Puma
    install_plugin Capistrano::Puma::Systemd
    install_plugin Capistrano::Puma::Nginx
    
    # Load custom tasks from `lib/capistrano/tasks` if you have any defined
    Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
    
```

●エラーが発生するコマンド

```

    % bundle exec cap production deploy
    
```

ちなみに本番環境でPumaは今回が初回起動で、  
EC2上の/etc/systemd/system/puma_アプリ名_production.serviceはまだ作成されておりません。

### 試したこと

公式のGitHubを再読し、プログラムと照らし合わせてみましたが特に問題を発見できませんでした。

<https://github.com/seuros/capistrano-puma>

Uninitializeということなので、「install_plugin
Capistrano::Puma::Systemd」自体に問題がありそうですが、前提条件としてGemの依存関係などに問題があったりするのでしょうか？

Systemd自体に知識がなく、そもそもエラーの原因が究明できておりません。

どなたかご教示頂けますでしょうか？
CC BY-SA 4.0
2022-08-01T10:50:26.527
90308
2022-08-03T14:29:42.673
2022-08-03T14:29:42.673
53349
53349
question
ruby aws capistrano
Capistranoの導入でCapistrano::Puma::Systemdがuninitialized constantになるエラーが発生する。
capistrano3-puma gem のバージョンが古いとこのエラーが出る可能性があります。Gemfile.lock
を確認してどのバージョンがインストールされているか確認してください。`Capistrano::Puma::Systemd` が導入されたのは v5.0.0
からです: <https://github.com/seuros/capistrano-
puma/blob/master/CHANGELOG.md#v500beta1-2020-11-04>

`Capistrano::Puma` の名前解決には成功しているので、capistrano3-puma gem は読み込めているけれど
`Capistrano::Puma::Systemd` が存在していないバージョンのものになっているのではないかと疑っています。

また、本題とは関係が薄いですがお使いの Ruby のバージョンも実は古いです。Ruby 2.6 は既に End of Life を迎えています:
<https://www.ruby-lang.org/en/downloads/branches/>
CC BY-SA 4.0
2022-08-01T16:06:43.460
90317
2022-08-01T16:06:43.460
19110
90308
answer