14

Używam Capistrano 3 z nowo wygenerowaną aplikacją Rails 4. Moja rozmieszczenie działa, ale gdy uruchamiam bundle exec rails console na serwer produkcyjny, otrzymuję ostrzeżenie od szyn:Wdrożenie Capistrano 3 dla konfliktu binarnego Rails 4?

wygląda ./bin/rails swojej aplikacji jest zalążek, który został wygenerowany przez Bundler.

W Railsach 4 bin/katalog Twojej aplikacji zawiera pliki wykonywalne, które są wersjonowane jak każdy inny kod źródłowy, a nie kody pośrednie generowane na żądanie.

Rzeczywiście binstubs generowane podczas wdrażania nadpisać binstubs w repozytorium:

Oryginalny binstub:

$ cat bin/rails 

#!/usr/bin/env ruby 
begin 
    load File.expand_path("../spring", __FILE__) 
rescue LoadError 
end 
APP_PATH = File.expand_path('../../config/application', __FILE__) 
require_relative '../config/boot' 
require 'rails/commands' 

binstub w produkcji:

$ cat bin/rails 

#!/usr/bin/env ruby 
# 
# This file was generated by Bundler. 
# 
# The application 'rails' is installed as part of a gem, and 
# this file is here to facilitate running it. 
# 

require 'pathname' 
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../../releases/20140930173754/Gemfile", 
    Pathname.new(__FILE__).realpath) 

require 'rubygems' 
require 'bundler/setup' 

load Gem.bin_path('railties', 'rails') 

Co musi się zmienić w celu dostosowania konfiguracji Capistrano do Rails 4?

# Gemfile 
group :development do 
    gem 'capistrano', '~> 3.1' 
    gem 'capistrano-rbenv', '~> 2.0' 
    gem 'capistrano-bundler', '~> 1.1.2' 
    gem 'capistrano-rails', '~> 1.1' 
end 

# config/deploy.rb 
lock '3.2.1' 
# ... 
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} 
set :rbenv_map_bins, %w{rake gem bundle ruby rails} 
# ... 

Cała reszta korzysta z ustawień domyślnych.

Odpowiedz

29

Ponieważ katalog ./bin jest kontrolowany w wersjach Rails 4, musimy uniemożliwić Capistrano połączenie go z wdrożeniami poprzez usunięcie bin z set :linked_dirs. Teraz, aby zapobiec nadpisywaniu przez bundler kontrolowanych wersji binstub, możemy dodać linię set :bundle_binstubs, nil, która uniemożliwi capistrano-bundler ustawienie opcji --binstubs podczas uruchamiania instalacji pakietu.

Nadzieję, że pomaga!

+3

To dokładne rozwiązanie jest zaimplementowane jako poprawka dla tego problemu tutaj https://github.com/capistrano/bundler/issues/45 – s01ipsist

+0

Ahh dobrze wiedzieć, dzięki za link! –

Powiązane problemy