2012-12-09 43 views
1

我在配置和相关事物方面有点新手,所以请宽容。乘客独立不能以capistano开始

我建立一个临时服务器的一堆爱好的项目,要做到这一点,我需要

  • 支持多种Ruby版本
  • 支持多种移动导轨/其他应用
  • 支持多种数据库和相关软件

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

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

我已经把东西拼凑得很好,其他一切似乎都有效,但由于某种原因,乘客未能在Capistrano要求时启动。如果我SSH进入框并在我自己输入命令它很好地工作。怎么了?

为了帮助你在你的努力,帮助我,这里是我的配置的拷贝/ 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 

这里是配置/部署/ 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 

回答

0

好血腥地狱。 在完整的预感,我删除了

default_run_options[:pty] = true 

从文件设置,并且像变魔术一样它开始工作。现在如果只有人会告诉我为什么。

+0

我看了一下我的许多变体的部署文件,他们都有这一行。 Brightbox生成的文件包含注释#Forces a Pty,以便svn + ssh存储库访问将起作用。如果您使用的是不同的SCM系统,则您不需要此功能。请注意, #ptys停止运行shell启动脚本。 – Snips

相关问题