乘客独立无法从capistrano开始

时间:2012-12-09 12:07:59

标签: ruby-on-rails capistrano passenger

在部署和相关事情方面,我有点新手,所以请宽容。

我正在为一堆业余爱好项目构建一个临时服务器,为此,我需要

  • 支持多个Ruby版本
  • 支持多个运行轨道/其他应用程序
  • 支持多个数据库和相关软件

我还希望部署脚本允许部署到生产,如果有一天到来。

这个背景需要使用RVM,Capistrano-multistage和Passenger Standalone(另一种选择是Mongrel,但是因为我希望在生产中使用Passenger,我认为在使用Passenger时也更安全)。所有这些都使得部署有点毛茸茸。

我已经很好地拼凑了一些东西,而其他一切似乎都有效,但由于某些原因,当Capistrano指挥时,乘客无法启动。如果我在框中输入SSH并在我自己输入命令,它可以很好地工作。怎么了?

为了帮助您帮助我,这是我的config / deploy.rb

的副本
set :application, "Appname"
set :repository,  "path-to-git-repo-over-ssh"

set :scm, :git

default_run_options[:pty] = true

set :rvm_ruby_string, ENV['GEM_HOME'].gsub(/.*\//,"")
set :rvm_install_ruby_params, '--1.9'      # for jruby/rbx default to 1.9 mode
set :rvm_install_pkgs, %w[libyaml openssl] # package list from https://rvm.io/packages
set :rvm_install_ruby_params, '--with-opt-dir=/usr/local/rvm/usr' # package support
set :use_sudo, false

before 'deploy:setup', 'rvm:install_rvm'   # install RVM
before 'deploy:setup', 'rvm:install_ruby'  # install Ruby and create gemset

require "rvm/capistrano"

require "bundler/capistrano"

require 'sidekiq/capistrano'

set :deploy_via, :remote_cache

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

set :rails_env, lambda { stage }
set :startcmd, lambda { "cd #{current_path} && bundle exec passenger start -d -p #{passenger_port} -e #{rails_env}  --pid-file=#{current_path}/tmp/pids/passenger.#{passenger_port}.pid  #{current_path}" }


namespace :deploy do

  task :stop do
    run("cd #{current_path} && bundle exec passenger stop -p #{passenger_port}")
  end

  task :restart do
    run("cd #{current_path} && touch tmp/restart.txt")
  end

  task :start do
    run("#{startcmd}")
  end
end

after "deploy:update_code" do
  run "(echo \"@reboot /bin/bash -l -c '#{startcmd}' >>log/boot.out 2>>log/boot.err # from capistrano \" && cat #{release_path}/crontab.#{stage}) | crontab -"
end

这是config / deploy / staging.rb

set :deploy_to, "/var/www/appname"
set :user, 'app-specific-user'
set :password, 'super-secret-password'
set :domain, '1.2.3.4'
server domain, :app, :web
role :db, domain, :primary => true

set :passenger_port, 1234

1 个答案:

答案 0 :(得分:0)

好可恶的地狱。 完全预感后,我删除了

default_run_options[:pty] = true

从文件设置,就像魔法一样,它开始工作。现在,如果只有人会告诉我原因。