簡體   English   中英

Capistrano多級部署到錯誤的目錄

[英]Capistrano Multistage deploying to wrong directory

我最近更新了我的寶石后,我的capistrano設置有一些問題。 我有一個多階段設置,包括生產和分段設置。

/config/deploy.rb

# setup multistage
set :stages, %w(testing production)
set :default_stage, "testing"
require 'capistrano/ext/multistage'

/config/deploy/production.rb

# Set deploy path
set :deploy_to, "/var/www/mysite/live"
set :rails_env, "production"

/config/deploy/testing.rb

# Set deploy path
set :deploy_to, "/var/www/mysite/test"
set :rails_env, "test"

問題是它似乎忽略了我的deploy_to設置。 它只是部署到默認的/ u / apps / mysite。

我不知道它是否有任何相關性,所有這一切的原因都是從apache + passenger到nginx + unicorn的轉變。 我不認為它與此有任何關系,因為這只是結帳過程。

在Stack Overflow上我偶然發現了這個。 這是一個古老的問題,但由於它被標記為開放,我將試一試。

我認為這可能是Capistrano實例如何加載的范圍問題。

我注意到這個語法在production.rb和test.rb文件中不起作用

 set :deploy_to, "/var/www/mysite/live"

但是這個做了:

set(:deploy_to)  { "/var/www/#{application}/live" }

它有一個微妙的區別,但我認為有效的實際上是將信息作為Proc塊傳遞,而第一個將它作為字符串傳遞。 我有一種偷偷摸摸的懷疑,當Capistrano實例出現時,弦不再存在。

這將向我表明您的負載中有些東西已關閉或需要訂單,因為您應該能夠在這些文件中設置部署變量。 如果您無法弄清楚,您可能會欺騙並圍繞deploy / production.rbdeploy / test.rb代碼

Capistrano::Configuration.instance.load do
  # variables, etc here
end

那肯定會告訴你這個文件沒有被加載到Capistrano實例的范圍內。

也是小點,但文件應該在

config/deploy # relative to your Rails app

/config/deploy/ # this is an absolute path off of your root folder

祝好運。 希望你已經解決了這個問題!

我最終通過在deploy / production.rb和testing.rb中添加以下內容來解決這個問題

set(:deploy_to)         { "/var/www/#{application}/live" }
set(:releases_path)     { File.join(deploy_to, version_dir) }
set(:shared_path)       { File.join(deploy_to, shared_dir) }
set(:current_path)      { File.join(deploy_to, current_dir) }
set(:release_path)      { File.join(releases_path, release_name) }

那些production.rb和testing.rb位於項目中的哪個位置?

確保它們在config/deploy

可能只是你在deploy.rb中的訂單 將要求置於舞台設置之上

require 'capistrano/ext/multistage'

# setup multistage
set :stages, %w(testing production)
set :default_stage, "testing"

暫無
暫無

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

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