2012-11-01 5 views
0

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:

  1. 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.

  2. 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 
    
  3. 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 
    
  4. 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 
    
  5. 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 
    
  6. Ran Capify pour obtenir des fichiers de déploiement. Tout a été supprimé du fichier deploy.rb Quitté le Capfile seul.

  7. Créé le répertoire de déploiement et créé deux fichiers.

    config/deploy/production.rb 
    config/deploy/staging.rb 
    
  8. 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:

  1. 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.

  2. Si j'ouvre la console de rails et exécute Rails.env, je reçois "staging" comme environnement.

  3. 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é."

  4. Il ne semble pas être quelque chose montré dans mon

  5. 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:

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 
+0

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

+0

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

+0

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

Répondre

0

j'ai découvert ENFIN le la question principale: le pipeline d'actifs

Première question: Je n'ai pas décommentez la ligne suivante forment le Capfile

load 'deploy/assets' 

ET

Sec Numéro du problème: Je n'ai jamais compilé les ressources (côté machine de développement ou côté serveur). gros whoops)

$ bundle exec rake assets:precompile 

Références

question Followup à tous ceux qui peuvent savoir: je remarqué que lorsque je compila les actifs , il est dit RAILS_ENV = produ ction au lieu de la mise en scène. Lors de la création du fichier staging.rb, j'ai copié le fichier production.rb. Je ne sais pas si cela a quelque chose à voir avec la production.

Est-ce prévu?

/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby /usr/local/rvm/gems/[email protected]/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets 
Questions connexes