新手问题 Capistrano 部署问题

rails_taotao · October 26, 2018 · Last by Rei replied at October 27, 2018 · 2981 hits
server xxx.xxx.xxxx', roles: [:web, :app, :db], primary: true


set :repo_url, 'ssh://git@gitlab.ys3.youtulink.com:22222/youtulink/youtuerp.git'
set :application, 'xxxxx'
set :user, 'xxxx'
set :password,'xxxxx'
set :puma_threads, [4, 16]
set :puma_workers, 0

# Don't change these unless you know what you're doing
set :pty, true
set :use_sudo, false
set :stage, :production
set :deploy_via, :remote_cache
set :deploy_to, "/home/#{fetch(:user)}/#{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.error.log"
set :puma_error_log, "#{release_path}/log/puma.access.log"
set :ssh_options, { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa) }
set :puma_preload_app, true
set :puma_worker_timeout, nil
set :puma_init_active_record, false # Change to true if using ActiveRecord
set :branch, :erp_production
set :log_level, :info
## Defaults:
# set :scm,           :git
# set :branch,        :master
# set :format,        :pretty
# set :log_level,     :debug
# set :keep_releases, 5

# Linked Files & Directories (Default None):
set :linked_files, %w{config/database.yml config/master.key config/webpacker.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/uploads public/assets public/packs public/storage}

set :rbenv_ruby, '2.5.1'
set :rvm_map_bins, %w{gem rake ruby rails bundle}
# namespace :puma do
#   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/erp_production`
        puts "WARNING: HEAD is not the same as origin/erp_production"
        puts "Run `git push` to sync changes."
        exit
      end
    end
  end

  desc 'Initial Deploy'
  task :initial do
    on roles(:app) do
      before 'deploy:restart', 'puma:start'
      invoke 'deploy'
    end
  end

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      invoke 'puma:restart'
    end
  end

  desc "Create linked_files"
  task :setup do
    on roles(:app) do
      execute "touch #{shared_path}/config/database.yml"
      execute "touch #{shared_path}/config/master.key"
      execute "touch #{shared_path}/config/webpacker.yml"
    end
  end


  before :starting, :check_revision
  after :finishing, :compile_assets
  after :finishing, :cleanup
  after :finishing, :restart
end

# ps aux | grep puma    # Get puma pid
# kill -s SIGUSR2 pid   # Restart puma
# kill -s SIGTERM pid   # Stop puma

#SSHKit::Runner::ExecuteError: Exception while executing on host ys1.youtulink.com: bundle exit status: 127 这个错误如何修复

server ‘xxx.xxx.xxxx’', roles: [:web, :app, :db], primary: true
to 
server ‘xxx.xxx.xxxx’', user: 'your-name',  roles: [:web, :app, :db], primary: true ?

日志贴全,隐去敏感信息。

Reply to Rei

无法 bundle install

建议贴上日志信息。 尝试一下在服务器上预先安装 bundle

gem install bundler

capfile 配置

# Load DSL and set up stages
require "capistrano/setup"

# Include default deployment tasks
require "capistrano/deploy"

# Load the SCM plugin appropriate to your project:
#
# require "capistrano/scm/hg"
# install_plugin Capistrano::SCM::Hg
# or
# require "capistrano/scm/svn"
# install_plugin Capistrano::SCM::Svn
# or
require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git

# Include tasks from other gems included in your Gemfile
#
# For documentation on these, see for example:
#
#   https://github.com/capistrano/rvm
#   https://github.com/capistrano/rbenv
#   https://github.com/capistrano/chruby
#   https://github.com/capistrano/bundler
#   https://github.com/capistrano/rails
#   https://github.com/capistrano/passenger
#
require "capistrano/rvm"
require "capistrano/rbenv"
# require "capistrano/chruby"
require "capistrano/bundler"
require "capistrano/rails/assets"
require "capistrano/rails/migrations"
# require "capistrano/passenger"
require 'capistrano/puma'
# require 'capistrano/sidekiq'
# require 'capistrano/sidekiq/monit'

# Load custom tasks from `lib/capistrano/tasks` if you have any defined


Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
```ruby

 执行cap production deploy
```shell
    12 chuck@ys1.youtulink.com 0.076s
      13 ln -s /home/chuck/youerp_production/shared/public/storage /home/chuck/youerp_production/releases/20181026102931/public/storage
    ✔ 13 [email protected] 0.078s
00:07 bundler:install
      01 $HOME/.rbenv/bin/rbenv exec ~/.rvm/bin/rvm default do bundle install --path /home/chuck/youerp_production/shared/bundle --without development test --deployment
      01 rbenv: /home/chuck/.rvm/bin/rvm: command not found
      01
#<Thread:0x000055778c9ef828@/home/taotao/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
    1: from /home/taotao/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
/home/taotao/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing on host ys1.youtulink.com: bundle exit status: 127 (SSHKit::Runner::ExecuteError)
bundle stdout: rbenv: /home/chuck/.rvm/bin/rvm: command not found
bundle stderr: Nothing written
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host ys1.youtulink.com: bundle exit status: 127
bundle stdout: rbenv: /home/chuck/.rvm/bin/rvm: command not found
bundle stderr: Nothing written


Caused by:
SSHKit::Command::Failed: bundle exit status: 127
bundle stdout: rbenv: /home/chuck/.rvm/bin/rvm: command not found
bundle stderr: Nothing written

Tasks: TOP => deploy:updated => bundler:install
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing on host ys1.youtulink.com: bundle exit status: 127
bundle stdout: rbenv: /home/chuck/.rvm/bin/rvm: command not found
bundle stderr: Nothing written


** DEPLOY FAILED
** Refer to log/capistrano.log for details. Here are the last 20 lines:


不知道什么原因

bundle stdout: rbenv: /home/chuck/.rvm/bin/rvm: command not found

用的是 rbenv 还是 rvm?去掉不必要那个。

Reply to Rei

用的是 rbenv,好的,我试下。谢谢

Reply to Rei
before "deploy:assets:precompile", "deploy:yarn_install"

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/erp_production`
        puts "WARNING: HEAD is not the same as origin/erp_production"
        puts "Run `git push` to sync changes."
        exit
      end
    end
  end
  desc 'Run rake yarn:install'
  task :yarn_install do
    on roles(:app) do
      within release_path do
        execute("cd #{release_path} && yarn install")
      end
    end
  end
  desc 'Initial Deploy'
  task :initial do
    on roles(:app) do
      before 'deploy:restart', 'puma:start'
      invoke 'deploy'
    end
  end

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      invoke 'puma:restart'
    end
  end

  desc "Create linked_files"
  task :setup do
    on roles(:app) do
      execute "touch #{shared_path}/config/database.yml"
      execute "touch #{shared_path}/config/master.key"
      execute "touch #{shared_path}/config/webpacker.yml"
    end
  end


  before :starting, :check_revision
  after :finishing, :compile_assets
  after :finishing, :cleanup
  after :finishing, :restart
end

使用 cap production deploy 一直提示 webpack 无法 install

贴日志

You need to Sign in before reply, if you don't have an account, please Sign up first.