Почему у Moonshine / Capistrano возникли проблемы с SFTP во время deploy: setup?

#ruby-on-rails #capistrano

#ruby-on-rails #capistrano

Вопрос:

У меня возникли проблемы с настройкой нового сервера с использованием Moonshine и Capistrano. Кажется, что он запускается довольно хорошо, устанавливает кучу пакетов Ubuntu, компилирует REE, устанавливает некоторые драгоценные камни, но затем не удается загрузить файл через SFTP с этим выводом:

   * executing `moonshine:setup_directories'
  * executing "mkdir /tmp/moonshine"
    servers: ["myserver.tld"]
    [myserver.tld] executing command
    command finished
    servers: ["myserver.tld"]
 ** sftp upload /Users/arussell/Sites/mysite/config/moonshine/production.yml -> /tmp/moonshine/production.yml
/Users/arussell/.rvm/gems/ree-1.8.7-2011.03/gems/capistrano-2.5.19/lib/capistrano/transfer.rb:196:in `normalize': undefined method `pos' for #<Pathname:0x10f3a6988> (NoMethodError)
    from /Users/arussell/.rvm/gems/ree-1.8.7-2011.03/gems/capistrano-2.5.19/lib/capistrano/transfer.rb:104:in `prepare_transfers'
  

Поиск в Google этой ошибки на самом деле не сильно проявляется, все, что я могу выяснить, это то, что capistrano / transfer.rb ожидает чего-то другого, кроме объекта PathName в строке 196, но я не уверен, чего он ожидает, и я не уверен, почему ему передается объект PathName.


Редактировать: Вот мой deploy.rb:

 set :stages, %w(staging production dev)
set :default_stage, "staging"
require 'capistrano/ext/multistage' rescue "YOU NEED TO INSTALL THE capistrano-ext GEM"
require 'fileutils'

if ENV['branch']
  set :branch, ENV['branch']
end

set :deploy_via, :remote_cache

before "deploy:restart", "deploy:delete_cache"

namespace(:deploy) do
  desc "delete cache"
  task :delete_cache do
    run "rm -rf /usr/local/shared/cache/"
  end
  task :null, :roles => :app do
    run "date"
  end
end
require './config/boot'
  

… и мой deploy / production.rb:

 server "myserver.tld", :app, :web, :db, :primary => true

set :rails_env, 'production'
  

Правка 2: я пытался использовать SCP вместо SFTP, но лучше не стало. Я добавил это в свой deploy / production.rb:

 upload "local", "remote", :via => :scp
download "remote", "local", :via => :scp
  

и вместо этого получил эту ошибку при попытке развертывания:

 upload via scp failed on myserver.tld: SCP did not finish successfully () (SCP did not finish successfully ())
  

Ответ №1:

Я тоже не могу разобраться с этой ошибкой. Похоже, версия Capistrano, которую вы используете, довольно устарела на год с лишним. Я бы обновил версию, которую вы используете, до более поздней версии и попробовал еще раз.

Если это все еще не решает вашу проблему, было бы полезно, если бы вы предоставили исправленную копию вашей конфигурации deploy.rb.

Комментарии:

1. Хорошая уловка, хотя обновление Capistrano до 2.9.0 не помогло: я все еще вижу ту же ошибку. Я отредактировал вопрос, чтобы добавить исправленные версии config / deploy.rb и config / deploy /production.rb.

Ответ №2:

Оказывается, это произошло из-за того, что Moonshine не смог обработать наличие файлов, специфичных для этапа развертывания (например, config/moonshine/production.yml ) во время cap production deploy:setup .

Вот как я это обошел:

  • Удалите config/moonshine/production.yml (замените production тем, что называется на вашем этапе развертывания)
  • Выполнить cap production deploy:setup
  • Верните config/moonshine/production.yml обратно
  • Затем запустите cap production deploy