【问题标题】:capistrano-env file permissionscapistrano-env 文件权限
【发布时间】:2015-06-17 18:25:13
【问题描述】:

我使用 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 命令,但可能存在其他不错的解决方案?

编辑

我创建了pull request 并将新的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

【问题讨论】:

    标签: php ruby capistrano web-deployment capistrano3


    【解决方案1】:

    您有几个选项可以让这变得更好。

    1. capistrano-env 似乎不支持自定义权限设置,但也许可以添加该功能! Open an issue at GitHub,也许项目维护者会添加它。

    2. 您可以修改您的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
    

    【讨论】:

    • 感谢您的回答。现在我正在使用选项#2,但我想到了更好的解决方案。好的,我会尝试在 GitHub 上打开新问题。
    • 我在这个 gem 中创建了拉取请求。请参阅我的更新答案。
    • 恭喜 PR 合并!
    【解决方案2】:

    查看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
    

    【讨论】:

    • 感谢@Joshua 提供代码示例。我在 github 上创建了拉取请求,并在这个 gem 中添加了新选项。请参阅我的更新答案。
    • @stepozer 整洁!拉取请求做得很好。
    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2023-03-22
    • 2011-05-15
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多