簡體   English   中英

Capistrano:deploy.rb文件重構

[英]Capistrano: deploy.rb file refactoring

我在deploy.rb中有以下代碼

namespace :app do
  desc "copies the configuration frile from ~/shared/config/*.yml to ~/config"
  task :copy_config_files,:roles => :app do
    run "cp -fv #{deploy_to}/shared/config/hoptoad.rb #{release_path}/config/initializers"
    run "cp -fv #{deploy_to}/shared/config/app_config.yml #{release_path}/config/app_config.yml"
  end
end

我認為保持deploy.rb文件干凈是個好主意,我試圖在config下將代碼移到capistrano_utilities.rb之上。 我正在使用Rails應用程序。 我將以下代碼行添加到deploy.rb中

require File.expand_path(File.dirname(__FILE__) + "/../lib/capistrano_utilities")

現在我收到了以下錯誤。

undefined method `namespace' for main:Object (NoMethodError)

deploy.rb中self的值是Capistrano :: Configuration。 雖然capistrano_utilities中self的值是Main。 所以我理解為什么我得到名稱空間方法錯誤。 這個問題的解決方法是什么?

config/deploy.rb ,嘗試load而不是require 此外,capistrano已經運行,就像你在RAILS_ROOT ,因此不需要使用__FILE__

load "lib/capistrano_utilities"

在一個Capistrano的配置文件, load被重新定義到另一個配置文件加載到當前配置。 在向它傳遞路徑時,它實際上調用load_from_file (由capistrano定義的私有方法),它只從磁盤讀取文件,而instance_eval從中讀取文件。

檢查Rails.root上的Capfile。 如果你使用capistrano 3,你會看到這一行;

Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }

現在,將您的文件放在“lib / capistrano / tasks / capistrano_utilities.cap”上,它將被加載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM