J'essaie d'obtenir un déploiement multi-étapes sur mon serveur et j'ai de la difficulté à faire fonctionner une configuration de staging et de production.Problème de déploiement multi-rails sur Ubuntu 11.10
Serveur: Ubuntu 11.10 (GNU/Linux 3.0.0-19-server x86_64)
Voici ce que je l'ai fait jusqu'à présent:
J'ai créé un nouveau projet appelé form_tester sur mon machine locale. J'utilise une base de données simple avec sqlite3 localement. Je souhaite utiliser mysql2 à la fois pour la mise en scène et la production.
Configuration des répertoires pour la mise en scène et la production sur le serveur.
/home/username/form_tester/staging /home/username/form_tester/production
Création de deux bases de données sur le serveur pour la mise en scène et la production. Je les ai également configurés pour l'accès par un utilisateur avec les privilèges corrects puisque je suis capable de générer les tables dedans.
ftstaging ftproduction
la Configuré fichier config/database.yml pour les deux la mise en scène et la production.
staging: adapter: mysql2 encoding: utf8 reconnect: false database: ftstaging pool: 5 username: dbuser password: pass host: server.com production: adapter: mysql2 encoding: utf8 reconnect: false database: ftproduction pool: 5 username: dbusr password: pass host: server.com
le Configuré Gemfile pour les deux la mise en scène et la production.
la source 'https://rubygems.org'
gem 'rails', '3.2.8' gem 'jquery-rails' gem 'capistrano' group :development do gem 'sqlite3' end group :staging do gem 'activerecord-mysql2-adapter' gem 'mysql2' end group :production do gem 'activerecord-mysql2-adapter' gem 'mysql2' end # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' gem 'uglifier', '>= 1.0.3' end
Ran Capify pour obtenir des fichiers de déploiement. Tout a été supprimé du fichier deploy.rb Quitté le Capfile seul.
Créé le répertoire de déploiement et créé deux fichiers.
config/deploy/production.rb config/deploy/staging.rb
Ajouté les informations suivantes pour la configuration:
Pour config/deploy/production.rb:
server "server.com", :app, :web, :db, :primary => true
set :deploy_to, "/home/username/form_tester/production"
set :rails_env, "production"
Pour config/deploy/staging.rb:
server "server.com", :app, :web, :db, :primary => true
set :deploy_to, "/home/username/form_tester/staging"
set :rails_env, "staging"
Pour config/deploy.rb:
set :stages, ['production', 'staging']
set :default_stage, 'staging'
require 'capistrano/ext/multistage'
# Set application name
set :application, 'form_tester'
set :domain, 'server.com'
set :user, 'username'
# Use Git source control
set :scm, :git
set :repository, "ssh://#{user}@#{domain}/home/#{user}/git/#{application}.git"
set :branch, 'master'
set :deploy_via, :remote_cache
set :scm_verbose, true
default_run_options[:pty] = true
set :use_sudo, false
namespace :deploy do
task :start do ; end
task :stop do ; end
desc "Restart application"
task :restart, :roles => :app, :except => { :no_release => true } do
run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
end
end
git 9.Initialized sur le serveur avec git --bare init et fait sûr d'avoir un accès approprié au répertoire pour le nom d'utilisateur.
git 10.Initialized sur la machine dev et poussé les fichiers vers le serveur repo à
ssh: //[email protected]/home/username/git/form_tester.git.
11.Démarrer un déploiement de la machine locale à la mise en scène sur le serveur. Je cours toutes les commandes suivantes sans erreurs.
Pour construire l'arborescence sous/home/nom d'utilisateur/form_tester/mise en scène
$ cap deploy:setup
$ cap deploy:check
$ cap deploy:update
*ssh'ed into my server*
$ rake schema:db:load
$ rake db:seed
$ rails console
> app.get('/')
I get a '200' returned
> exit
encore ssh'ed dans mon serveur
12.I fait un lien symbolique de/var/www/transfert vers mon application public directory
/home/username/form_tester/staging/current/public.
$ sudo ln -s /home/username/form_tester/staging/current/public /var/www/staging
13.Modifié le/etc/apache2/site s-disponible/fichier par défaut pour ajouter un sous-utilisateur pour l'application de transfert.
$ sudo vi /etc/apache2/sites-available/default
…
RailsBaseURI /staging
<Directory /var/www/staging>
Options -MultiViews
</Directory>
…
14.At ce point (localement) je lance bouchon deploy: redémarrage et il semble redémarrer le serveur car il n'y a pas d'erreur. (connecté au serveur) J'ai également essayé sudo service apache2 restart, qui redémarre également le serveur.
15.À ce stade, je trouve l'URL server.com/staging mais je ne vois pas mon application.
D'autres fichiers:
config/application.rb:
require File.expand_path('../boot', __FILE__)
require 'rails/all'
if defined?(Bundler)
Bundler.require(*Rails.groups(:assets => %w(development test)))
end
module FormTester
class Application < Rails::Application
config.encoding = "utf-8"
config.filter_parameters += [:password]
config.active_support.escape_html_entities_in_json = true
config.active_record.whitelist_attributes = true
config.assets.enabled = true
config.assets.version = '1.0'
end
end
config/environnements/staging.rb et production.rb
FormTester::Application.configure do
config.cache_classes = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
end
/var/log/apache2/error.log
Il semble y avoir rubis rien lié montrant ici que passager Phusion, mais ce n'est pas une erreur.
[Thu Nov 01 01:16:11 2012] [notice] caught SIGTERM, shutting down
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/gd.so' - /usr/lib/php5/20090626/gd.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/mcrypt.so' - /usr/lib/php5/20090626/mcrypt.so: cannot open shared object file: No such file or directory in Unknown on line 0
[Thu Nov 01 01:16:12 2012] [notice] Apache/2.2.20 (Ubuntu) DAV/2 SVN/1.6.12 PHP/5.3.6-13ubuntu3.7 with Suhosin-Patch Phusion_Passenger/3.0.17 configured -- resuming normal operations
[Thu Nov 01 01:16:20 2012] [error] [client 68.6.38.254] File does not exist: /var/www/favicon.ico
[Thu Nov 01 01:16:22 2012] [error] [client 68.6.38.254] File does not exist: /var/www/favicon.ico
[Thu Nov 01 01:23:07 2012] [error] [client 68.6.38.254] File does not exist: /var/www/favicon.ico
Observations:
schéma en cours de coupe: db: charge semble construire les tables correctement pour ma base de données, mais sa construction les fait pour le fichier development.sqlite3.
Si j'ouvre la console de rails et exécute Rails.env, je reçois "staging" comme environnement.
Ceci est très probablement lié à # 1, rake db: la graine ne semble pas remplir ma base de données appelée "ftstaging" dans mysql sur le serveur même si elle s'exécute. Le déploiement de la capture ne semble pas faire quoi que ce soit de différent que le déploiement de cap: mise à jour. Le résultat final est une page sur server.com/staging qui indique "Nous sommes désolés, mais quelque chose s'est mal passé."
Il ne semble pas être quelque chose montré dans mon
râteau courir montre que je suis toujours en mode développement.
About your application's environment Ruby version 1.9.3 (x86_64-linux) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.8 JavaScript Runtime Node.js (V8) Active Record version 3.2.8 Action Pack version 3.2.8 Active Resource version 3.2.8 Action Mailer version 3.2.8 Active Support version 3.2.8 Middleware ActionDispatch::Static, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x00000002796948>, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::DebugExceptions, ActionDispatch::RemoteIp, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::ConnectionAdapters::ConnectionManagement, ActiveRecord::QueryCache, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ParamsParser, ActionDispatch::Head, Rack::ConditionalGet, Rack::ETag, ActionDispatch::BestStandardsSupport Application root /home/username/form_tester/staging/releases/20121101080752 Environment development Database adapter sqlite3 Database schema version 20121030011807
J'ai essayé les tutoriels suivants avec peu de chance:
- https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension
- http://trevmex.com/post/367574671/steps-for-setting-up-a-capistrano-multistage-deployment
- http://cjohansen.no/en/apache/multi_staging_environment_for_rails_using_capistrano_and_mod_rails
- http://guides.beanstalkapp.com/deployments/deploy-with-capistrano.html#prepare-project
Questions:
Je suis sûr qu'il ya quelqu'un là-bas qui comprend le processus de déploiement et de sortir, ce que je manque? Que dois-je vérifier? D'après ce que j'ai montré ici, que puis-je faire différemment?
Toute aide est grandement appréciée à ce stade. Je me bats avec ce problème depuis deux jours maintenant et je ne sais pas ce que je fais mal et je ne sais pas quoi d'autre essayer. J'ai commencé à utiliser des rails il y a environ trois semaines et la plupart de mes frustrations ont été dues au fait que je n'ai pas pu trouver une description claire du processus de déploiement. J'espère obtenir plus de clarté sur cette question et, en retour, aider les autres à passer d'une idée à un déploiement en plusieurs étapes facilement. Sur une autre note, pourquoi quelqu'un aurait-il «voté contre» cet article? Je pose une question légitime avec des informations pour le sauvegarder. Si ce n'est pas une bonne question, dites-moi pourquoi. Merci
11/1/12 - MISE À JOUR:
je me suis dit comment obtenir mon application dans l'environnement « de la mise en scène », mais il ne se charge toujours pas server.com/staging.
J'ai ajouté "Rails.env = ActiveSupport :: StringInquirer.new ('staging')" dans mon fichier config/application.rb, mais je ne sais pas pourquoi cela force l'environnement. Est-ce la bonne façon de le faire?
Je puis déployé, ssh'ed dans mon serveur comme nom d'utilisateur, et a couru rake db: migrer et rake db: graines. Je vois maintenant ma base de données peuplée.
Quoi d'autre pourrait se passer? Y at-il un problème avec mon fichier environnements/staging.rb?
/etc/apache2/httpd.conf
ServerName server.com
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.17/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.17
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby
Pas de réponse pour vous, pour le moment, désolé. Quelques points: les commandes capistrano devraient être 'cap blah' par exemple. 'cap staging déployer: setup'. Lorsque je suis sur le serveur cible, je recommande d'exécuter toutes les commandes de rake ajoutées avec 'RAILS_ENV = staging', par exemple. 'RAILS_ENV = râteau intermédiaire db: seed'. Vous parlez passager - a-t-il été correctement configuré avec 'PassengerRoot' et' PassengerRuby' etc? Y a-t-il des journaux dans le répertoire du journal sous le répertoire déployé pour le transfert? –
mccannf
Je ne remarque pas de différence en utilisant le déploiement de cap cap: setup vs cap deploy: setup. Je suis en train de définir set: default_stage, 'staging' dans mon fichier deploy.rb. Aussi, quand je cours des commandes avec RAILS_ENV = staging avant rake ... Je regarderai dans le PassengerRoot et le PassengerRuby et les notations. – rjd
J'ai mis le contenu de mon fichier httpd.conf ci-dessus. Ce sont les emplacements PassengerRoot et PassengerRuby par défaut installés par Passenger, qui correspondent à mon installation. – rjd