第一次部署 - 需要在服务器上安装所有宝石

时间:2012-02-07 20:34:24

标签: ruby-on-rails-3 deployment capistrano

我正在尝试将1次部署到服务器(cap deploy:cold),并且它一直要求我安装gem。只举一个例子:

*** [err :: ip-address] Could not find net-ssh-2.3.0 in any of the sources

我有什么能够安装一次拍摄所需的所有宝石吗?

这是我的deploy.rb文件和gemfile:

deploy.rb

    set :application, "myapp"
set :repository,  "repo goes here"
set :scm, :git
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`

role :web, "ipaddress"                          # Your HTTP server, Apache/etc
role :app, "ipaddress"                          # This may be the same as your `Web` server
role :db,  "ipaddress", :primary => true # This is where Rails migrations will run
# role :db,  "your slave db-server here"

# if you're still using the script/reaper helper you will need
# these http://github.com/rails/irs_process_scripts

set :deploy_to, "/home/deploy/#{application}"
set :rails_env, 'production'
set :branch, "master"

set :scm, :git
set :user, "user"
set :runner, "user"
# ssh_options[:port] = 2232
set :use_sudo, false
set :normalize_asset_timestamps, false


# If you are using Passenger mod_rails uncomment this:
namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

namespace :bundler do
  task :create_symlink, :roles => :app do
    shared_dir = File.join(shared_path, 'bundle')
    release_dir = File.join(current_release, '.bundle')
    run("mkdir -p #{shared_dir} && ln -s #{shared_dir} #{release_dir}")
  end

  task :bundle_new_release, :roles => :app do
    bundler.create_symlink
    run "cd #{release_path} && bundle install --without test"
  end

  task :lock, :roles => :app do
    run "cd #{current_release} && bundle lock;"
  end

  task :unlock, :roles => :app do
    run "cd #{current_release} && bundle unlock;"
  end
end

 after "deploy", "deploy:cleanup"

namespace :deploy do

    desc "Restarting mod_rails with restart.txt"
    task :restart, :roles => :app, :except => { :no_release => true } do
        run "touch #{current_path}/tmp/restart.txt"
    end

    [:start, :stop].each do |t|
        desc "#{t} task is a no-op with mod_rails"
        task t, :roles => :domain do ; end
    end
end

task :after_update_code do  
 run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml"
end

的Gemfile:

source 'http://rubygems.org'

gem 'rails', '3.1.3'

# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'



gem 'json'
gem 'rake', '0.9.2.2'
gem 'mysql2'
gem 'capistrano'
gem 'therubyracer'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.1.5'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug'

2 个答案:

答案 0 :(得分:1)

也许你改变这一行

run "cd #{release_path} && bundle install --without test"

run "cd #{release_path} && bundle install --path=you_gem_path --without #{bundle_without.join(' ')}"

您可以通过运行

找到您的宝石路径
$ echo $GEM_PATH

你还必须设置bundle_without 你可以在文件的开头设置它

set :bundle_without,      [:development, :test]

答案 1 :(得分:0)

尝试将此添加到您的deploy.rb

set :bundle_without, [:development, :test]
require 'bundler/capistrano'