Ich habe daran gearbeitet, die Produktion mit capistrano zu produktivieren. Ich habe mehrere Probleme und während ich die meisten repariere, haben wir noch eine letzte.Assets werden bei der Bereitstellung mit capistrano zur Produktion auf Amazon EC2 nicht vorkompiliert.
Unsere Optionen für Vorkompilierungs-Assets kompilieren sie nicht ordnungsgemäß in der Produktion, und deshalb können wir die zuletzt entwickelten Funktionen nicht verwenden, da sie stark von JS abhängen.
Ohne zu versuchen, auf beeinflussen, wie jemand dieses Problem analysieren würde, das ist etwas, was ich es Arbeit zu machen habe versucht:
- Precompiled Vermögen lokal auf GitHub Repo geschoben, Kappe von lokalen Rechnern eingesetzt ec2. cap deploy ist lokal, der auf ec2 gedrückte Code ist der auf github.
- Mit Capistrano Aufgaben wie vorgeschlagen versucht. Lade 'deploy'assets' in die Capfile laden und den cap deployen lassen: setup task tut was.
- die Option cap deploy Gebraucht: Aktiva: sauber und dann die Kappe bereitstellen: Vermögenswerte: precompile
- aus öffentlichen Versuchte Entfernen Vermögenswerte und dann eine pipeline_precompile Aufgabe in deploy.rb
- Expired Vermögen zu verwenden, Schienen zwingt alles vorzukompilieren Wechsel assets.versions in application.rb
- versucht, verschiedene Kombinationen auf config.assets in Umgebungen/production.rb
- Schließlich versucht das Löschen mit dort öffentlich/Vermögen in der Produktion und Vorkompilieren bis RAILS_ENV = Produktionsbündel exec Rake Vermögen: precompile
Die App verwendet einfach nicht die neuen JS-Dateien. Wenn Sie den Code entweder auf dem Repo oder auf dem Server selbst überprüfen, habe ich einen einfachen Kommentar zu name.js.coffee ("# Zeigt und verbirgt Menüs abhängig von den Daten in DB" in Zeile xxx) und das ist nicht in die kompilierten assets.js in der Produktion. Dies ist ein kurzer Test, um sicher zu gehen, dass die letzten Assets verwendet werden.
Das ganze Problem hier ist die js und CSS-Dateien, nicht so viel Schienen. Deshalb ist es so schwer zu testen oder zu finden. Dies ist einer der Gründe für die Popularität von js Frameworks in letzter Zeit. Im Falle von Problemen müssen Sie sich nicht umbringen, wenn Sie nach dem Problem suchen. Wenn das Problem in Rubin oder Schienen liegt, dauert es normalerweise nicht lange, bis Sie es herausfinden. Sobald Sie zu js, CSS und Cross-Browser-Kompatibilität, gut, das ist das Problem zur Hand.
Hier ist meine deploy.rb-Datei. Laufschienen 3.2.12 Rubin-1.9.3-P327:
# $:.unshift(File.expand_path('./lib', ENV['rvm_path']))
# Load rvm's capistrono plugins
require 'rvm/capistrano'
require 'bundler/capistrano'
set :rvm_type, :user
set :user, 'username'
set :domain, 'ip_address'
set :application, "app_pro"
set :keep_releases, 2 # It keeps on two old releases.
# git repo details
set :scm, :git # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names
set :repository, "[email protected]:user/app.git"
set :scm_username, 'user'
set :git_enable_submodules, 1
set :git_shallow_clone, 1
set :branch, 'master'
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`
role :web, domain # Your HTTP server, Apache/etc
role :app, domain # This may be the same as your `Web` server
role :db, domain, :primary => true# 'ec2-23-23-156-118.compute-1.amazonaws.com' This is where Rails migrations will run
# role :db, "your slave db-server here"
# deply options
default_run_options[:pty] = true
set :ssh_options, {:forward_agent => true}
set :ssh_options, {:auth_methods => "publickey"}
set :ssh_options, {:keys => ["~/Downloads/key.pem"]}
set :deploy_to, "/home/user/appdir"
set :deploy_via, :remote_cache
set :use_sudo, false
# if you want to clean up old releases on each deploy uncomment this:
after "deploy:restart", "deploy:cleanup"
# if you're still using the script/reaper helper you will need
# these http://github.com/rails/irs_process_scripts
# If you are using Passenger mod_rails uncomment this:
namespace :deploy do
task :start do
# run COMMAND="/etc/init.d/nginx restart" invoke SUDO=1
run "sudo /etc/init.d/nginx restart"
# exit
end
after "deploy:start", "deploy:cleanup"
task :stop do ; end
task :restart, :roles => :app, :except => { :no_release => true } do
run "touch #{File.join(current_path,'tmp','restart.txt')}"
end
task :setup_config, roles: :app do
run "mkdir -p #{shared_path}/config"
put File.read("config/database.example.yml"), "#{shared_path}/config/database.yml"
puts 'now edit the config file database in #{shared_path}'
end
after 'deploy:setup', 'deploy:setup_config'
desc "Symlink shared resources on each release - not used"
task :symlink_config, :roles => :app do
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
end
after 'deploy:finalize_update', 'deploy:symlink_config'
desc "It helps to seed database with values"
task :seed do
run "cd #{current_path}; bundle exec rake db:seed RAILS_ENV=#{rails_env}"
end
task :create_schema do
run "cd #{current_path}; bundle exec rake db:create RAILS_ENV=#{rails_env} --trace"
end
end
On-Arbeits neue/alternative (deploy_new2.rb) file:
# On-working new/alternative deploy.rb file:
require 'rvm/capistrano'
require 'bundler/capistrano'
set :rvm_type, :user
set :application, "ip_address"
set :domain, 'ip_address'
# Roles
role :web, domain
role :app, domain
role :db, domain, :primary => true
#deployment details
set :deploy_via, :remote_cache
set :user, "username"
set :copy_compression, :bz2
set :git_shallow_clone, 1
set :scm_verbose, true
set :use_sudo, false
set :deploy_to, "/home/user/dir"
default_run_options[:pty] = true
set :ssh_options, {:forward_agent => true}
set :ssh_options, {:auth_methods => "publickey"}
set :ssh_options, {:keys => ["~/Downloads/key.pem"]}
#repo details
set :scm, :git
set :repository, "[email protected]:user/app.git"
set :scm_username, 'user'
set :keep_releases, 2
set :branch, "master"
namespace :deploy do
# task :start, :roles => :app, :except => { :no_release => true } do
# # not need to restart nginx every time
# # run "service nginx start"
# run "cd #{release_path} && touch tmp/restart.txt"
# end
# after "deploy:start", "deploy:cleanup"
# after 'deploy:cleanup', 'deploy:symlink_config'
# You do not need reload nginx every time, eventhought if you use passenger or unicorn
# task :stop, :roles => :app, :except => { :no_release => true } do
# run "service nginx stop"
# end
# task :graceful_stop, :roles => :app, :except => { :no_release => true } do
# run "service nginx stop"
# end
# task :reload, :roles => :app, :except => { :no_release => true } do
# run "cd #{release_path} && touch tmp/restart.txt"
# run "service nginx restart"
# end
task :restart, :roles => :app, :except => { :no_release => true } do
run "cd #{release_path} && touch tmp/restart.txt"
end
# If you enable assets/deploy in Capfile, you do not need this
# task :pipeline_precompile do
# # run "cd #{release_path}; RAILS_ENV=#{rails_env} bundle exec rake assets:precompile"
# # precompile assets before deploy and upload them to server
# # run_locally("RAILS_ENV=#{rails_env} rake assets:clean && RAILS_ENV=#{rails_env} rake assets:precompile")
# # top.upload "public/assets", "#{release_path}/public/assets", :via =>:scp, :recursive => true
# end
end
# you do not need to this, because you already add require 'bundler/capistrano'
# before "deploy:assets:precompile", "bundle:install"
Und ./Capfile:
load 'deploy'
# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'
load 'config/deploy' # remove this line to skip loading any of the default tasks
Vielen Dank im Voraus für jede Hilfe! Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
denken Jeder aus den Protokollen, dass es ein Caching-Problem sein könnte? – TKVR
Wahrscheinlich nicht, da Sie versucht haben, die Assets auslaufen zu lassen. – MarkDBlackwell
Ich sehe "Schienen Fehler: nicht auf Protokolldatei zugreifen" oben. Gut vielleicht, um die Zeile "log/*" aus .gitignore zu entfernen (vorausgesetzt, Sie haben dort schon "log/*. Log") und "touch log/.gitkeep", fügen Sie hinzu, commit und deploy erneut, um zu sehen das Protokoll zur Bereitstellung der Produktionszeit in /home/ubuntu/teamzoom_pro_set2/releases/*/log/production.log. Vielleicht ist das Log-Verzeichnis beim Entpacken von Git nicht vorhanden. – MarkDBlackwell