Развертывание Capistrano в неправильной среде

Я начал использовать Capistrano для развертывания моего приложения Rails на разных удаленных серверах, однако развертывание на сервере с использованием cap production deploy устанавливает мой RAILS_ENV на развертывание, а не на производство. Я попытался принудительно настроить среду, добавив ENV['RAILS_ENV'] ||= 'production' в environment.rb, но это, похоже, не решает проблему. Я проверил production.log для Passenger, Apache и Rails, и ничего не случилось, за исключением неправильного развертывания среды. Что может быть не так с моим развертыванием Capistrano?

производство.рб

role :app, %w{deployer@*****}
role :web, %w{deployer@*****}
role :db,  %w{deployer@*****}

# Define server(s)
server '*****', user: 'deployer', roles: %w{web}

# SSH Options
# See the example commented out section in the file
# for more options.
set :ssh_options, {
    forward_agent: false,
    auth_methods: %w(password),
    password: '******',
    user: 'deployer',
}

развернуть.rb

# Define the name of the application
set :application, 'app_pro'

# Define where can Capistrano access the source repository
# set :repo_url, 'https://github.com/[user name]/[application name].git'
set :scm, :git
set :repo_url, 'https://github.com/awernick/app_pros.git'

# Define where to put your application code
set :deploy_to, "/var/sentora/hostdata/zadmin/public_html/app_dir"
set :pty, true

set :format, :pretty

# Set the post-deployment instructions here.
# Once the deployment is complete, Capistrano
# will begin performing them as described.
# To learn more about creating tasks,
# check out:
# http://capistranorb.com/

# namespace: deploy do

#   desc 'Restart application'
#   task :restart do
#     on roles(:app), in: :sequence, wait: 5 do
#       # Your restart mechanism here, for example:
#       execute :touch, release_path.join('tmp/restart.txt')
#     end
#   end

#   after :publishing, :restart

#   after :restart, :clear_cache do
#     on roles(:web), in: :groups, limit: 3, wait: 10 do
#       # Here we can do anything such as:
#       # within release_path do
#       #   execute :rake, 'cache:clear'
#       # end
#     end
#   end

# end

Capfile

# Load DSL and set up stages
require 'capistrano/setup'

# Include default deployment tasks
require 'capistrano/deploy'

# Include tasks from other gems included in your Gemfile
#
# For documentation on these, see for example:
#
#   https://github.com/capistrano/rvm
#   https://github.com/capistrano/rbenv
#   https://github.com/capistrano/chruby
#   https://github.com/capistrano/bundler
#   https://github.com/capistrano/rails
#   https://github.com/capistrano/passenger
#
# require 'capistrano/rvm'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
  require 'capistrano/bundler'
  require 'capistrano/rails'
  require 'capistrano/rails/assets'
  require 'capistrano/rails/migrations'
  require 'capistrano/passenger'

# Load custom tasks from `lib/capistrano/tasks' if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

*Поля в файлах заполнены корректной информацией.


person Alan W    schedule 10.12.2014    source источник
comment
вы пробовали использовать set: :stage.... в deploy/production.rb?   -  person rmagnum2002    schedule 10.12.2014
comment
@ rmagnum2002 Я сделал. Capistrano продолжает развертывание для разработки, несмотря ни на что. Когда я установил RailsEnv для разработки в Passenger, Rails работает правильно.   -  person Alan W    schedule 10.12.2014


Ответы (3)


Я могу ошибаться, но обычно Capistrano, если у него нет специальных плагинов для Apache или Nginx, развертывает код как есть, ваши проблемы возникают из-за конфигурации пассажира. Возможно, он пытается запустить сервер в неправильной среде. Не помню как с апачем, а с nginx надо убедиться, что строчка

...
passenger_app_env production;
...

Внутри /opt/nginx/conf/nginx.conf

Возможно, это поможет вам настроить конфигурацию Apache: https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html#PassengerAppEnv

person Vitaly Stanchits    schedule 10.12.2014
comment
Пассажир устанавливает рабочую среду по умолчанию. Всякий раз, когда я пытаюсь изменить свой app_env на разработку, приложение запускается без проблем. Когда я возвращаю его в производство, приложение отказывается выполняться. - person Alan W; 10.12.2014

В production.rb у вас должно быть:

set :stage, :production

или некоторые говорят, что эта опция не будет работать в v3 (я использую v3, и set stage работает для меня), однако вы можете прочитать это, если set stage не работает:

http://dylanmarkow.com/blog/2014/01/08/capistrano-3-setting-a-default-stage/

person rmagnum2002    schedule 10.12.2014

Я смог решить свою проблему. Моя проблема возникла из-за того, что я забыл добавить свой производственный secret_key_base в качестве переменной среды на моем производственном сервере.

person Alan W    schedule 10.12.2014