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

相关文章

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

Python实现自动化表单填写功能

《Python实现自动化表单填写功能》在Python中,自动化表单填写可以通过多种库和工具实现,本文将详细介绍常用的自动化表单处理工具,并对它们进行横向比较,可根据需求选择合适的工具,感兴趣的小伙伴跟... 目录1. Selenium简介适用场景示例代码优点缺点2. Playwright简介适用场景示例代码

OpenManus本地部署实战亲测有效完全免费(最新推荐)

《OpenManus本地部署实战亲测有效完全免费(最新推荐)》文章介绍了如何在本地部署OpenManus大语言模型,包括环境搭建、LLM编程接口配置和测试步骤,本文给大家讲解的非常详细,感兴趣的朋友一... 目录1.概况2.环境搭建2.1安装miniconda或者anaconda2.2 LLM编程接口配置2