rails capistrano 自动化部署

2024-03-12 20:08

本文主要是介绍rails capistrano 自动化部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 在本地生存ssh key ,如果有,可以跳过,如果没有,参考

https://blog.csdn.net/tang05709/article/details/78470258

2.在服务器创建deploy用户并给与sudo权限

adduser deploy --ingroup sudo

3.在服务器安装nodejs,yarn, ruby,bundle, rails,mysql及相关依赖

bundler要手动在服务器上安装好

4.服务器也生成ssh key, 并在.ssh,即id_rsd.pub 下同级目录下新建authorized_keys文件,把本地的id_rsd.pub里的东西复制进authorized_keys,这样可以免密登录

5.修改Gemfile,在development下添加capistrano

group :development do# Access an interactive console on exception pages or by calling 'console' anywhere in the code.gem 'web-console', '>= 3.3.0'gem 'listen', '>= 3.0.5', '< 3.2'# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/springgem 'spring'gem 'spring-watcher-listen', '~> 2.0.0'gem 'capistrano', '~> 3.11'gem 'capistrano-rvm', '~> 0.1.2'gem 'capistrano-rails', '~> 1.4'gem 'capistrano3-puma', '~> 3.1', '>= 3.1.1'
end

然后运行bundle install, 

docker : docker-compose build web

安装好后运行

bundle exec cap install

这样会在根目录下生成Capfile,在config目录下生成deploy.rb和deploy目录

6.修改Capfile,添加require

require "capistrano/rvm"
require 'capistrano/rails'
require "capistrano/bundler"
require "capistrano/rails/assets"
require "capistrano/rails/migrations"
require 'capistrano/puma'
require 'capistrano/puma/nginx'
install_plugin Capistrano::Puma
install_plugin Capistrano::Puma::Nginx

rvm和rbenv看各自选择,只能选其一

7. 修改config/deploy.rb

`ssh-add`
# config valid for current version and patch releases of Capistrano
lock "~> 3.11.0"set :application, "jizan"
#set :repo_url, "git@example.com:me/my_repo.git"
#username github的用户名 demo git项目
set :repo_url, "git@github.com:username/demo.git"set :rvm_type, :user
set :rvm_ruby_version,  File.read('.ruby-version').strip# Default branch is :master
# ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp
ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp# Default deploy_to directory is /var/www/my_app_name
# set :deploy_to, "/var/www/my_app_name"
set :deploy_to, "/home/deploy/xxx"# Default value for :format is :airbrussh.
# set :format, :airbrussh# puma
set :puma_init_active_record, true
set :puma_threads, [0, 8]
set :puma_workers, 2# 前端
# set :compile_client, ask('compile client? (yes: 编译, no: 跳过)', 'no')# You can configure the Airbrussh format using :format_options.
# These are the defaults.
# set :format_options, command_output: true, log_file: "log/capistrano.log", color: :auto, truncate: :auto# Default value for :pty is false
# set :pty, true# Default value for :linked_files is []
append :linked_files, "config/database.yml", "config/application.yml", "config/master.key", "public/robots.txt"# Default value for linked_dirs is []
append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "public/uploads", "public/uwrite", "public/system"# Default value for default_env is {}
# set :default_env, { path: "/opt/ruby/bin:$PATH" }# Default value for local_user is ENV['USER']
# set :local_user, -> { `git config user.name`.chomp }# Default value for keep_releases is 5
# set :keep_releases, 5# Uncomment the following to require manually verifying the host key before first deploy.
# set :ssh_options, verify_host_key: :secure

新版本没有secret.yml和application.yml,但多了master.key

8.修改config/deploy/production.rb

server "0.0.0.0", user: "deploy", roles: %w{app db web}

0.0.0.0 服务器ip

9.修改bin/setup

#!/usr/bin/env ruby
require 'fileutils'
include FileUtils# path to your application root.
APP_ROOT = File.expand_path('..', __dir__)def system!(*args)system(*args) || abort("\n== Command #{args} failed ==")
endchdir APP_ROOT do# This script is a starting point to setup your application.# Add necessary setup steps to this file.puts '== Installing dependencies =='system! 'gem install bundler --conservative'system('bundle check') || system!('bundle install')# Install JavaScript dependencies if using Yarnsystem!('bin/yarn')puts "\n== Copying sample files =="unless File.exist?('config/database.yml')cp 'config/database.example.yml', 'config/database.yml'endunless File.exist?('config/application.yml')cp 'config/application.example.yml', 'config/application.yml'endputs "\n== Preparing database =="system! 'bin/rails db:setup'puts "\n== Removing old logs and tempfiles =="system! 'bin/rails log:clear tmp:clear'puts "\n== Restarting application server =="system! "rm -f tmp/pids/server.pid"system! 'bin/rails restart'
end

我使用了yarn,所以去掉了yarn的注释

因为我增加了application.yml,所以也需要相应增加判断

10.运行 cap production deploy:check查看问题并处理问题

11. 运行cap production deploy 部署

 

我踩过的坑

1.set :repo_url, "git@github.username/demo.git"

username是github的用户名

2.rake stderr: /usr/share/yarn/lib/cli.js:45726

Sprockets::FileNotFound: couldn't find file 'jquery' with type 'application/javascript'

这个是nodejs版本过低,和yarn版本相差太大造成的,升级nodejs

3.部署好后样式获取不到

修改config/envionments/production.rb

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

改为

config.public_file_server.enabled = true

 

这篇关于rails capistrano 自动化部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802424

相关文章

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do