Capistrano не удается развернуть на удаленном сервере - PullRequest
3 голосов
/ 13 сентября 2011

РЕШЕНИЕ

Решением было добавить следующее в начало файла production.rb:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
require "rvm/capistrano"                  # Load RVM's capistrano plugin.
set :rvm_ruby_string, '1.9.2@rails31dataserver'        # Or whatever env you want it to run in.
set :rvm_bin_path, '/usr/local/rvm/bin'

Часть, которую я пропустил раньше, была set :rvm_bin_path, '/usr/local/rvm/bin', так как я никогда раньше не использовал этот параметр конфигурации в развертывании Capistrano, и я сделал несколько. Ну что ж, все за несколько дней работы. Кредит переходит на tonyflint в канале #rvm на irc.freenode.net!

Исходное сообщение

Примечания к скале

  • У меня установлена ​​системная установка RVM
  • Я разворачиваюсь через Capistrano

Я сейчас ошеломлен. По сути, я пытаюсь выполнить развертывание через Capistrano, и это не удается. Вот пример моих файлов deploy.rb и production.rb (я делаю многоэтапную среду и пропускаю файл staging.rb, так как он работает нормально). http://pastie.org/2523675

Вот вывод cap production deploy:setup:

$ cap production deploy:setup
  * executing `production'
    triggering start callbacks for `deploy:setup'
  * executing `multistage:ensure'
  * executing `deploy:setup'
  * executing "sudo -p 'sudo password: ' mkdir -p /var/www/html/dataserver /var/www/html/dataserver/releases /var/www/html/dataserver/shared /var/www/html/dataserver/shared/system /var/www/html/dataserver/shared/log /var/www/html/dataserver/shared/pids"
    servers: ["omitted"]
Password: 
    [omitted] executing command
*** [err :: omitted] sudo
*** [err :: omitted] :
*** [err :: omitted] sorry, you must have a tty to run sudo
*** [err :: omitted] 
    command finished in 60ms
failed: "sh -c 'sudo -p '\\''sudo password: '\\'' mkdir -p /var/www/html/dataserver /var/www/html/dataserver/releases /var/www/html/dataserver/shared /var/www/html/dataserver/shared/system /var/www/html/dataserver/shared/log /var/www/html/dataserver/shared/pids'" on omitted

Теперь я понимаю, почему это происходит. Я удаленно пытаюсь использовать sudo, и это безопасность нет-нет. Итак, это означает, что мне нужно использовать default_run_options[:pty] = true. Поэтому я раскомментирую его и снова запускаю cap production deploy:setup, и все работает хорошо и модно. Структура каталогов для развертывания get setup и все. Потрясающие. Теперь я пытаюсь запустить cap production deploy и вот вывод:

$ cap production deploy
  * executing `production'
    triggering start callbacks for `deploy'
  * executing `multistage:ensure'
  * executing `deploy'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    updating the cached checkout on all servers
    executing locally: "hg log -r default --template '{node|short}'"
    command finished in 52ms
  * executing "if [ -d /var/www/html/dataserver/shared/cached-copy ]; then hg pull --repository /var/www/html/dataserver/shared/cached-copy https://cowfish.unh.edu/hg/DataServerApp && hg update --repository /var/www/html/dataserver/shared/cached-copy --clean 6979cec4fc00; else hg clone --noupdate https://cowfish.unh.edu/hg/DataServerApp /var/www/html/dataserver/shared/cached-copy && hg update --repository /var/www/html/dataserver/shared/cached-copy --clean 6979cec4fc00; fi"
    servers: ["omitted"]
Password: 
    [omitted] executing command
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] http authorization required
 ** [omitted :: out] realm: Mercurial Project Repository
 ** [omitted :: out] user:
 ** [omitted :: out] d
 ** [omitted :: out] e
 ** [omitted :: out] p
 ** [omitted :: out] l
 ** [omitted :: out] o
 ** [omitted :: out] y
 ** [omitted :: out]
 ** [omitted :: out] password:
 ** [omitted :: out]
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] requesting all changes
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] adding changesets
 ** [omitted :: out] adding manifests
 ** adding file changes
 ** [omitted :: out] added 11 changesets with 187 changes to 125 files
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] 114 files updated, 0 files merged, 0 files removed, 0 files unresolved
    command finished in 1332ms
    copying the cached version to /var/www/html/dataserver/releases/20110912233835
  * executing "cp -RPp /var/www/html/dataserver/shared/cached-copy /var/www/html/dataserver/releases/20110912233835 && (echo 6979cec4fc00 > /var/www/html/dataserver/releases/20110912233835/REVISION)"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 23ms
  * executing `deploy:finalize_update'
  * executing "chmod -R g+w /var/www/html/dataserver/releases/20110912233835"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 7ms
  * executing "rm -rf /var/www/html/dataserver/releases/20110912233835/log /var/www/html/dataserver/releases/20110912233835/public/system /var/www/html/dataserver/releases/20110912233835/tmp/pids &&\\\n      mkdir -p /var/www/html/dataserver/releases/20110912233835/public &&\\\n      mkdir -p /var/www/html/dataserver/releases/20110912233835/tmp &&\\\n      ln -s /var/www/html/dataserver/shared/log /var/www/html/dataserver/releases/20110912233835/log &&\\\n      ln -s /var/www/html/dataserver/shared/system /var/www/html/dataserver/releases/20110912233835/public/system &&\\\n      ln -s /var/www/html/dataserver/shared/pids /var/www/html/dataserver/releases/20110912233835/tmp/pids"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 8ms
  * executing "find /var/www/html/dataserver/releases/20110912233835/public/images /var/www/html/dataserver/releases/20110912233835/public/stylesheets /var/www/html/dataserver/releases/20110912233835/public/javascripts -exec touch -t 201109122338.35 {} ';'; true"
    servers: ["omitted"]
    [omitted] executing command
 ** [out :: omitted] find: /var/www/html/dataserver/releases/20110912233835/public/images: No such file or directory
 ** [out :: omitted] find: /var/www/html/dataserver/releases/20110912233835/public/stylesheets: No such file or directory
 ** [out :: omitted] find: /var/www/html/dataserver/releases/20110912233835/public/javascripts: No such file or directory
    command finished in 6ms
  * executing `deploy:symlink'
  * executing "rm -f /var/www/html/dataserver/current && ln -s /var/www/html/dataserver/releases/20110912233835 /var/www/html/dataserver/current"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 6ms
 ** transaction: commit
  * executing `deploy:restart'
  * executing "sudo -p 'sudo password: ' touch /var/www/html/dataserver/current/tmp/restart.txt"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 10ms
    triggering after callbacks for `deploy'
  * executing `deploy:migrate'
    triggering before callbacks for `deploy:migrate'
  * executing `sqlite3:link_configuration_file'
  * executing "ln -nsf /var/www/html/dataserver/shared/sqlite_config.yml /var/www/html/dataserver/releases/20110912233835/config/database.yml"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 6ms
  * executing "cd /var/www/html/dataserver/releases/20110912233835 && rake RAILS_ENV=production  db:migrate"
    servers: ["omitted"]
    [omitted] executing command
 ** [out :: omitted] sh: rake: command not found
    command finished in 5ms
failed: "sh -c 'cd /var/www/html/dataserver/releases/20110912233835 && rake RAILS_ENV=production  db:migrate'" on omitted

Похоже, что в любой загруженной среде не видно rake. Чтобы увидеть, что загружено в путь, я создал задачу развертывания, вот вывод:

$ cap production test_path
  * executing `production'
    triggering start callbacks for `test_path'
  * executing `multistage:ensure'
  * executing `test_path'
  * executing "echo $PATH"
    servers: ["omitted"]
Password: 
    [omitted] executing command
 ** [out :: omitted] /usr/local/bin:/bin:/usr/bin
    command finished in 11ms
  * executing "echo $rvm_path"
    servers: ["omitted"]
    [omitted] executing command
 ** [out :: omitted] 
    command finished in 5ms

Теперь вы заметите, что путь определенно не правильный. Для пользователя, который устанавливает сеанс, должно быть следующее:

/usr/local/rvm/gems/ruby-1.9.2-p290@rails31dataserver/bin:/usr/local/rvm/gems/ruby-1.9.2-p290@global/bin:/usr/local/rvm/rubies/ruby-1.9.2-p290/bin:/usr/local/rvm/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/lpeabody/bin

И снова я понимаю, почему это не работает. Это потому что я запускаю default_run_options[:pty] = true, моя среда загружается, по крайней мере, такова моя текущая теория. Итак, после всего этого я остаюсь с выводом - Мне нужно каким-то образом загрузить свою среду, чтобы rake мог работать без удаленного включения sudo.

Теперь я знаю, что я не единственный человек, который когда-либо нуждался в этом, поэтому любые указания или советы будут высоко оценены. Я потратил все свои силы на 8 часов, и мне нужно развернуть это приложение как можно скорее.

Ответы [ 4 ]

3 голосов
/ 13 сентября 2011

Решением было добавить следующее в начало файла production.rb:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
require "rvm/capistrano"                  # Load RVM's capistrano plugin.
set :rvm_ruby_string, '1.9.2@rails31dataserver'        # Or whatever env you want it to run in.
set :rvm_bin_path, '/usr/local/rvm/bin'

Часть, которую я пропустил раньше, была set :rvm_bin_path, '/usr/local/rvm/bin', поскольку я никогда раньше не использовал этот параметр конфигурации в развертывании Capistrano, и я сделал несколько. Ну что ж, все за несколько дней работы. Кредит переходит на tonyflint в канале #rvm на irc.freenode.net!

3 голосов
/ 11 декабря 2012

Убедитесь, что вы запустили:

gem install rvm-capistrano

перед тем как поставить

require "rvm/capistrano" in your "deploy.rb"

После того, как я это сделаю, все заработает.

1 голос
/ 13 сентября 2011

Некоторые вещи, которые нужно попробовать в вашем файле capfile (они предназначены для общесистемной установки RVM и не будут работать для установки на пользователя.)

require "rvm/capistrano"
set :rvm_bin_path, "/usr/local/rvm/bin"
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
0 голосов
/ 30 июля 2013

В моем случае добавление

default_run_options[:pty] = true

решил проблему.

...