capistrano-env 文件权限
capistrano-env file permissions
我用gemcapistrano-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
命令,但可能存在其他好的解决方案?
编辑
我创建了 pull request 并在这个 gem 中添加了新的 filemode
选项。所以,现在的解决方案是:
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 似乎不支持自定义权限设置,但也许可以添加该功能! Open an issue at 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 code 上传是在单个任务中完成的。您可以在本地覆盖该任务的定义,以便更改文件权限。在 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
我用gemcapistrano-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
命令,但可能存在其他好的解决方案?
编辑
我创建了 pull request 并在这个 gem 中添加了新的 filemode
选项。所以,现在的解决方案是:
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 似乎不支持自定义权限设置,但也许可以添加该功能! Open an issue at 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 code 上传是在单个任务中完成的。您可以在本地覆盖该任务的定义,以便更改文件权限。在 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