我使用 gem capistrano-env
发现了一个小问题。我的部署脚本是:
Capistrano::Env.use do |env|
env.add 'DB_DSN', 'mysql:host=localhost;dbname=dbname'
env.add 'DB_USER', 'user'
env.add 'DB_PASS', 'pass'
end
此代码在部署后在服务器上创建.env
文件。但! .env
文件权限是 640,我的 PHP 脚本无法读取它。我可以在每次部署后运行chmod
命令,但可能存在其他不错的解决方案?
编辑
我创建了拉取请求并将新的filemode
选项添加到此 gem 中。因此,现在的解决方案是:
Capistrano::Env.use do |env|
env.add 'DB_DSN', 'mysql:host=localhost;dbname=dbname'
env.add 'DB_USER', 'user'
env.add 'DB_PASS', 'pass'
env.filemode = 0644
end
您有几个选项可以使它更好。
-
看起来 capistrano-env 不支持自定义权限设置,但也许可以添加该功能!在 GitHub 上打开一个问题,也许项目维护者会添加它。
-
您可以修改
deploy.rb
以运行必要的chmod
命令。这样,您就不必在每次部署后手动运行 chmod。
像这样:
# In deploy.rb
after "capenv:copy", "capenv:chmod" do
on roles(:all) do
execute "chmod", "a+r", "#{release_path}/#{Capistrano::Env.filename}"
end
end
查看 capevn 代码,上传是在单个任务中完成的。您可以在本地覆盖该任务的定义,以便更改文件权限。 在 deploy.rb 中放置类似以下内容的内容
namespace :capenv do
desc 'copy .env to release_path'
task :copy do
on roles(:all) do
upload! StringIO.new(Capistrano::Env.to_s), "#{release_path}/#{Capistrano::Env.filename}", mode: 'a+r'
end
end
end