Capistrano:IP 上不存在链接文件 /shared/config/database.yml


我不知道

这是一个错误还是什么。但是我的linked_fileslinked_dirs设置正确,我想,就像我拥有deploy.rb一样:

append :linked_files, 'config/database.yml', 'config/secrets.yml'
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system'`

cap production deploy:check:linked_dirs运行成功,但是 cap production deploy:check:linked_files产生此错误 => linked file home/deploy/appname/shared/config/database.yml does not exist on IP,永远。

cap production doctor打印:

:linked_dirs ["log", "tmp/pids", "tmp/cache", "tmp/sockets", "public/system", "public/assets"]
:linked_files ["config/database.yml", "config/secrets.yml"]

我已经多次对我的服务器ssh user@IP进行SSH处理,以确认共享/配置文件夹中是否有database.yml文件。它总是在那里,我什至在 Vim 上打开它进行确认。它确实存在。

我已经尽力解决这个问题,但找不到解决方案。有人帮忙。

# deploy.rb
set :application, 'appname'
set :repo_url, 'git@github.com:username/repo.git'
set :deploy_to, '/home/deploy/appname'
append :linked_files, 'config/database.yml', 'config/secrets.yml'
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system'

我的宝石文件中有:

gem 'capistrano', '~> 3.7.1', require: false
gem 'capistrano-rails', '~> 1.2', require: false
gem 'capistrano-passenger', '~> 0.2.0', require: false
gem 'capistrano-rbenv', '~> 2.1', require: false

对于将来可能遇到这种情况的任何人,请确保您始终在本地计算机上编辑文件,而不是像我一样在服务器上编辑文件,因为在服务器的deploy.rb文件中,我有行set :deploy_to, '/home/deploy/appname',这是正确的,但是在我的本地机器上,我有set :deploy_to, 'home/deploy/appname',在之前没有前导斜杠。

正如 Matt 在评论中指出的那样,cap是存在于本地机器上的程序,因此cap production deploy将从本地机器查找 capistrano 配置并从 git 存储库编译资产。因此,每当有任何要更改的内容时,请在本地计算机上进行更改,并确保提交。

您的

服务器上已经有文件database.yml吗?

路径示例

path_to_your_app/shared/config/database.yml

你能显示 deploy.rb 文件吗?

更新:

尝试更改这些字符串

append :linked_files, 'config/database.yml', 'config/secrets.yml'
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system'

set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml')
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system' )

最新更新