1

我正在尝试部署并且我不希望版本控制中的 Gemfile.lock 。但是当它被删除时,我收到以下错误。

* executing "cd /var/www/vhosts/my-site/releases/20120628162217 && bundle install --       gemfile /var/www/vhosts/mysite/releases/20120628162217/Gemfile --path  /var/www/vhosts/my-site/shared/bundle --deployment --quiet --without development test cucumber  analytics"
    servers: ["staging-beta.my-site.com"]
[staging-beta.my-sitehealth.com] executing command
** [out :: staging-beta.my-site.com] The --deployment flag requires a Gemfile.lock.     Please make sure you have checked your Gemfile.lock into version control before deploying.
    command finished in 332ms

这是我的 deploy.rb 文件:

require 'thinking_sphinx/deploy/capistrano'

set :rvm_ruby_string, '1.9.3'

# Ignore the .git directory when creating a release
set :copy_exclude, ".git*"

set :stages, %w(production staging rails_ec2_west_staging vagrant analytics highgroove ec2_highgroove stage_analytics ec2_staging highgroove_staging ec2_chef ec2_sphinx_chef solr_staging ec2_sphinx_prod_chef)
set :default_stage, "staging"

set :bundle_without, [:development, :test, :cucumber, :analytics]
require 'bundler/capistrano'
set :custom_symlinks, {}

require 'capistrano/ext/multistage'

if ARGV.first == 'ec2_staging'
  require 'rvm/capistrano'
  # for dual deploys on ec2 staging
  set :application, "my-site3"
else
  set :application, "my-site"
end

set :use_sudo, false
set :user, "www-data"
set :group, "www-data"

ssh_options[:forward_agent] = true

set :branch, $1 if `git branch` =~ /\* (\S+)\s/m

set :scm, :git
set :repository, "git@github.com:my-company/my-site3.git"
set :deploy_to, "/var/www/vhosts/#{application}"
set :deploy_via, :remote_cache
set :deploy_env, 'production'

# If you are using Passenger mod_rails uncomment this:
# if you're still using the script/reapear helper you will need
# these http://github.com/rails/irs_process_scripts

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

   task :seed, :roles => :db do
     rake = fetch(:rake, "rake")
     rails_env = fetch(:rails_env, "production")

     run "cd #{current_path} && #{rake} RAILS_ENV=#{rails_env} db:seed"
   end

end

namespace :assets do
  task :precompile do
    run "cd #{current_path} && #{rake} RAILS_ENV=#{rails_env} my-site-web:assets:precompile"
  end
end

task :uname do
  run "uname -a"
end

after "deploy:update", "deploy:cleanup"
after "deploy:update", "assets:precompile"

require './config/boot'
#require 'airbrake/capistrano'
4

1 回答 1

5

包含 gemfile.lock 是最佳实践。来自 Bundlers 理性页面:http ://gembundler.com/rationale.html

这很重要:Gemfile.lock 使您的应用程序成为您自己的代码和它最后一次运行的第三方代码的单个包,您可以确定一切正常。在 Gemfile 中指定您依赖的第三方代码的确切版本不会提供相同的保证,因为 gems 通常会为其依赖项声明一系列版本。

于 2012-06-28T17:38:38.183 回答