这是一个错误还是什么。但是我的linked_files
和linked_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' )