所以我的解决方法是将bin/文件夹变成共享文件夹。
set :linked_dirs, fetch(:linked_dirs, []).push('bin')
然后在下一次部署时,bin/文件夹将会被符号链接到shared/bin
您只需要进入此目录一次,将之前分发的可执行文件移动过来即可。
cp /your_deploy_path/releases/PREV_RELEASE/bin/* /your_deploy_path/shared/bin
... 并确保你 chmod ug+x shared/bin/*
还有在我的情况下,我是在 Amazon EC2-linux 机器上运行的,由于某些原因 bin 文件是由 ruby.exe
生成而不是只有 ruby
。请确保检查这些文件并删除 .exe
扩展名(如果你不是在 Windows 上运行)。
编辑 - 我不再确定之前的答案,因为我在那个设置下遇到了 rails + capistrano + whenever 的漏洞。但以下内容适用于 Rails 5 + Capistrano > 3.6.1.
重新生成最新的 bins(你可能需要执行类似下面的操作:
# bundle config --delete bin # 可能需要这样做
rake rails:update:bin
# git add bin # 如果你的 bin 目录在 gitignore 中,请从中删除并提交
)
从链接目录中移除 bin(与原始解决方案相反),并在 deploy.rb 中添加额外的一行:
set :bundle_binstubs, nil
部署。从这里开始,它会看到 bin 文件已使用适当的-x 权限生成,并正确引用了 boot 文件。
请参考这个Stack Overflow链接