質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

解決済

【Rails】Capistranoでデプロイ中、sudo: /bin/systemctl: コマンドが見つかりません と出る

Hinoarashi.
Hinoarashi.

総合スコア64

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

1回答

0評価

0クリップ

366閲覧

投稿2022/01/11 10:55

現在環境を以下の通り移行中です。

環境
Rails5.1.27.0.0
Ruby2.4.13.0.0
capistrano3.10.13.16.0
capistrano3-puma3.1.15.2.0
本番環境Amazon EC2 LinuxAmazon EC2 Linux

開発で移行も終わり、Capistranoでデプロイするとsudo: /bin/systemctl: コマンドが見つかりませんというエラーが発生します。

試しに本番環境で systemctlと打ってみると-bash: systemctl: command not foundとでました。
恐らく capistrano3-puma5系からsystemdがデフォルトになったようなのでそれが関係してると思ってます。
ちなみに移行前はこんなエラー発生しませんでした。

仕方なく本番で bundle exec pumactl startservice nginx restart を打ったら更新が完了しました。
しかし時間節約のためにどうしてもCapistranoでデプロイをしたいです。

どうすればエラーを解決できるでしょうか?
何卒よろしくお願いいたします。

puma.rb

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } threads threads_count, threads_count port ENV.fetch("PORT") { 3000 } environment ENV.fetch("RAILS_ENV") { "development" } workers ENV.fetch("WEB_CONCURRENCY") { 2 } plugin :tmp_restart

production.rb

set :stage, :production role :app, %w[deploy@xxx] role :web, %w[deploy@xxx] role :db, %w[deploy@xxx] server 'xxx', user: 'deploy', roles: %w[web app] set :sitemap_roles, :web set :whenever_roles, -> { :web } set :whenever_options, -> { { roles: fetch(:whenever_roles) } } set :whenever_identifier, -> { "#{fetch(:application)}_#{fetch(:stage)}" } set :whenever_environment, -> { fetch :rails_env, 'production' } set :whenever_variables, -> { "environment=#{fetch :whenever_environment}" } set :whenever_update_flags, -> { "--update-crontab #{fetch :whenever_identifier} --set #{fetch :whenever_variables}" } set :whenever_clear_flags, -> { "--clear-crontab #{fetch :whenever_identifier}" } set :ssh_options, { keys: %w[/Users/xxx/.ssh/id_rsa], forward_agent: true, auth_methods: %w[publickey], }

deploy.rb

set :application, 'xxx' set :repo_url, 'git@github.com:xxx' set :deploy_to, '/var/www/xxx' set :puma_threads, [4, 16] set :puma_workers, 0 set :pty, true set :use_sudo, false set :stage, :staging set :deploy_via, :remote_cache set :deploy_to, "/var/www/#{fetch(:application)}" set :puma_bind, "unix://#{shared_path}/tmp/sockets/#{fetch(:application)}-puma.sock" set :puma_state, "#{shared_path}/tmp/pids/puma.state" set :puma_pid, "#{shared_path}/tmp/pids/puma.pid" set :puma_access_log, "#{release_path}/log/puma.access.log" set :puma_error_log, "#{release_path}/log/puma.error.log" set :puma_preload_app, true set :puma_worker_timeout, nil set :puma_init_active_record, true set :puma_restart_command, 'bundle exec puma' set :rbenv_type, :system set :rbenv_path, '/usr/local/src/rbenv' set :rbenv_ruby, '3.0.0' set :linked_dirs, fetch(:linked_dirs, []).push( 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads', ) set :linked_files, fetch(:linked_files, []).push( 'config/database.yml', 'config/secrets.yml', 'config/puma.rb', '.env', ) namespace :puma do Rake::Task[:restart].clear_actions desc 'Overwritten puma:restart task' task :restart do puts 'Overwriting puma:restart to ensure that puma is running. Effectively, we are just starting Puma.' puts 'A solution to this should be found.' invoke 'puma:stop' invoke 'puma:start' end desc 'Create Directories for Puma Pids and Socket' task :make_dirs do on roles(:app) do execute "mkdir #{shared_path}/tmp/sockets -p" execute "mkdir #{shared_path}/tmp/pids -p" end end before :start, :make_dirs end namespace :deploy do desc 'Make sure local git is in sync with remote.' task :check_revision do on roles(:app) do unless `git rev-parse HEAD` == `git rev-parse origin/master` puts 'WARNING: HEAD is not the same as origin/master' puts 'Run `git push` to sync changes.' exit end end end desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do invoke 'puma:restart' end end before :starting, :check_revision after :finishing, :compile_assets after :finishing, :cleanup end after 'deploy', 'sitemap:refresh'

Capfile

require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/scm/git' install_plugin Capistrano::SCM::Git require 'capistrano/rails' require 'capistrano/rbenv' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' require 'capistrano/bundler' require 'capistrano/puma' require 'capistrano/sitemap_generator' require 'whenever/capistrano' require 'dotenv' Dotenv.load install_plugin Capistrano::Puma install_plugin Capistrano::Puma::Systemd # Loads custom tasks from `lib/capistrano/tasks' if you have any defined. Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。