【问题标题】:Excluding files from being deployed with Capistrano while still under version control with Git使用 Capistrano 排除文件部署,同时仍使用 Git 进行版本控制
【发布时间】:2010-04-01 05:11:16
【问题描述】:

我想开始在我的 Rails 应用程序中使用 qUnit 测试 JavaScript,我想知道如何将测试 JavaScript 和测试运行器 HTML 页面置于版本控制之下(当然,我使用的是 Git)但不让它们使用 Capistrano 部署应用程序时的生产服务器。我的第一个想法是让 Capistrano 像往常一样发送所有代码,包括测试文件,并编写一个任务以在部署过程结束时删除它们。不过,这似乎是一种黑客行为。有没有更简洁的方法来告诉 Capistrano 在部署时忽略存储库的某些部分?

【问题讨论】:

    标签: ruby-on-rails git deployment capistrano qunit


    【解决方案1】:

    有很多方法可以做到这一点,您可以像 VonC 建议的那样将测试保存在应用程序的测试分支中,但这意味着您将在主分支中进行所有更改,然后将其同步到您的测试分支. (并非没有优点,但有时会很痛苦)

    您可以使用 .gitignore 文件到您的目录。

    您添加到此的任何文件都不会添加到您的存储库中。由于 capistrano 只是从您的存储库中提取和发布,因此不包含这些文件将使它们远离您的生产服务器。

    最后但同样重要的是,如果您希望主存储库中的测试文件用于版本控制,您可以将配方添加到您的 config/deploy.rb 文件中。类似于:

    desc "Remove Test Files"  
        task :remove_test_files , :roles => :web do
          sudo %{rm -f #{current_path}/public/javascripts/testfile.js}
          sudo %{rm -f #{current_path}/public/javascripts/anothertestfile.js}
        end
    
    after 'deploy:remove_test_files'
    

    并指定您要删除的文件,这将在您部署时删除您想要的任何文件。 :)

    以上任何方法都可以。选择适合您的方法。

    【讨论】:

    • 我当时没有看到你的回答。 +1
    • @VonC & Dustin - 如果您的 cap 文件在部署存储库中,但您不希望它们在生产服务器上,您建议如何处理?它们将被部署到releases/variable_directory_name
    • @ChristopherIckes - 就我个人而言,我不会将 deploy.rb 脚本保存在我的生产仓库中。同样,如果您需要它进行版本控制,我会将它们保留在主分支之外,因此它们不会被部署。即我会将我的部署脚本放在“部署”分支中以进行版本控制,然后使用该分支执行“上限部署”。我的部署脚本从 github 拉出 master,因此将 deploy.rb 放在不同的分支中应该可以工作。
    【解决方案2】:

    从 2013 年 8 月 30 日起,您可以简单地创建一个 .gitattributes 文件和 export-ignore 您选择的文件/文件夹。

    features/ export-ignore
    spec/     export-ignore
    

    参考:https://github.com/capistrano/capistrano/pull/626

    【讨论】:

      【解决方案3】:

      您可以在测试分支中进行这些测试(在任何测试之前合并主分支)

      这样,当您要求 Capistrano 部署主分支上的内容时,不会包含任何类型的测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        相关资源
        最近更新 更多