gpt4 book ai didi

ruby-on-rails - 使用 Capistrano 和 ActiveStorage 部署后未显示图像

转载 作者:行者123 更新时间:2023-12-04 12:23:56 30 4
gpt4 key购买 nike

我已经在 Digital Ocean 的服务器上运行了 Spree,但是每次部署新版本时,我都找不到用户在以前版本上上传的图像
根据我发现的相关帖子,我设置符号链接(symbolic link)目录的方式似乎存在问题
我尝试添加 storage dir 到我的 deploy.rb 中的linked_dirs并发布了运行 cap production deploy 的新版本,但我仍然遇到同样的错误

set :linked_dirs,  %w{log tmp/pids tmp/cache tmp/sockets vendor/bundle .bundle public/system public/uploads storage}
我真的不知道这是否可以从当前版本开始工作,但是 问题是以前的图像仍然丢失,我需要在部署新版本后保留它们
这是我的 Capfile
# Load DSL and Setup Up Stages
require 'capistrano/setup'
require 'capistrano/deploy'

require 'sshkit/sudo'

require 'capistrano/rails/migrations'
require 'capistrano/bundler'
require 'capistrano/rvm'
require 'capistrano/puma'
require 'capistrano/nginx'

install_plugin Capistrano::Puma

# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
这是我的 config/deploy.rb
# config valid for current version and patch releases of Capistrano
lock "~> 3.14.0"

# Change these
server 'XXX.XX.XX.XXX', port: 22, roles: [:web, :app, :db], primary: true

set :repo_url, 'git@gitlab.com:my-user/my-app-name.git'
set :application, 'my-app-name'
set :user, 'deploy'
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 :deploy_via, :remote_cache
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, true # Change to false when not using ActiveRecord


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

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/master`
puts "WARNING: HEAD is not the same as origin/master"
puts "Run `git push` to sync changes."
end
end
end

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

# Reload Nginx after deploy
after 'deploy:published', 'nginx:reload'

before :starting, :check_revision
# after :finishing, :precompile_assets
after :finishing, :cleanup
# after :finishing, :restart
end
这是我的 config/environments/production.rb
Rails.application.configure do
config.cache_classes = true
config.eager_load = true

# Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false
config.action_controller.perform_caching = true

# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = true

# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :local

# Use the lowest log level to ensure availability of diagnostic information
# when problems arise.
config.log_level = :debug

# Prepend all log lines with the following tags.
config.log_tags = [ :request_id ]

config.action_mailer.perform_caching = false

# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot be found).
config.i18n.fallbacks = true

# Send deprecation notices to registered listeners.
config.active_support.deprecation = :notify

# Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new

if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end

# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false

Rails.application.routes.default_url_options[:protocol] = 'https'
end
这是我的 config/storage.yml
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>

local:
service: Disk
root: <%= Rails.root.join("storage") %>
有关的:

https://github.com/spree/spree/issues/2754

最佳答案

我有这个设置。在配置/存储中

  service: Disk
root: <%= Rails.root.join("tmp/storage") %>

staging:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>

local:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>

production:
service: Disk
root: <%= Rails.root.join("../shared/storage") %>
并在环境/生产中 config.active_storage.service = :production和环境/开发 config.active_storage.service = :development通知生产有../shared/storage

关于ruby-on-rails - 使用 Capistrano 和 ActiveStorage 部署后未显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62879147/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com