Bonjour, je déploie ma première application Rails sur le serveur Ubuntu 16 à l’aide de Capistrano
tout s’est bien passé, sauf que les images ne s’affichent pas dans l’environnement de production.
Sur le serveur de production, les images se trouvent dans ce chemin: /myapp/current/public/assets
Mais si je regarde cela dans le navigateur, mes liens avec les images brisées me le permettent (voir image), il s’agit d’un lien cassé pour l’image de l’en-tête.
la chose étrange est qu’il y a un fichier .svg
dans /myapp/current/public/assets
qui apparaît parfaitement dans le navigateur, dans l’image ci-dessous est le chemin affiché
c’est mon Capfile
# Load DSL and set up stages require "capistrano/setup" # Include default deployment tasks require "capistrano/deploy" set :rbenv_type, :user # or :system, depends on your rbenv setup set :rbenv_ruby, '2.3.1' require 'capistrano/rbenv' require 'capistrano/bundler' require 'capistrano/rails' # Load custom tasks from `lib/capistrano/tasks` if you have any defined Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
Ceci est le config/deploy.rb
# config valid only for current version of Capistrano lock '3.6.1' set :application, 'myapp' set :repo_url, '[email protected]:DadiHall/myapp.git' # Default deploy_to directory is /var/www/my_app_name set :deploy_to, '/home/deploy/myapp' set :linked_files, %w{config/database.yml config/secrets.yml} set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} namespace :deploy do desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do execute :touch, release_path.join('tmp/restart.txt') end end after :publishing, 'deploy:restart' after :finishing, 'deploy:cleanup'
fin
Voici les environments/production.rb
Rails.application.configure do config.cache_classes = true config.consider_all_requests_local = false config.action_controller.perform_caching = true config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? config.assets.js_compressor = :uglifier # Do not fallback to assets pipeline if a precomstackd asset is missed. config.assets.comstack = false config.assets.digest = true config.assets.initialize_on_precomstack = false # `config.assets.precomstack` and `config.assets.version` have moved to config/initializers/assets.rb config.log_level = :debug config.i18n.fallbacks = true config.active_support.deprecation = :notify config.log_formatter = ::Logger::Formatter.new config.active_record.dump_schema_after_migration = false Braintree::Configuration.environment = :sandbox Braintree::Configuration.merchant_id = ENV['merchant_id'] Braintree::Configuration.public_key = ENV['public_key'] Braintree::Configuration.private_key = ENV['private_key'] end
Dans le /etc/nginx/sites-enabled/default
j’ai les lignes suivantes
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name mydomain.com; passenger_enabled on; rails_env production; root /home/deploy/myapp/current/public; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
c’est le journal d’erreur nginx
[ 2016-09-28 06:25:02.4500 1594/7f900ee89700 age/Sha/ApiServerUtils.h:794 ]: Log file reopened. [ 2016-09-28 09:45:43.7508 1597/7f2326502700 age/Cor/CoreMain.cpp:819 ]: Checking whether to disconnect long-running connections for process 1978, application /home/deploy/hlinreykdal/current/public (production) App 21337 stdout: App 21405 stdout: [ 2016-09-28 10:30:31.0631 1597/7f2326502700 age/Cor/CoreMain.cpp:819 ]: Checking whether to disconnect long-running connections for process 21405, application /home/deploy/hlinreykdal/current/public (production) App 23240 stdout: App 23308 stdout: [ 2016-09-28 10:41:40.1769 1597/7f2326502700 age/Cor/CoreMain.cpp:819 ]: Checking whether to disconnect long-running connections for process 23308, application /home/deploy/hlinreykdal/current/public (production) App 24329 stdout: App 24397 stdout:
J’ai essayé de bundle exec rake assets precomstack
avec un peu de chance.
J’ai déployé et redémarré nginx
encore et encore, sans aucune chance
J’ai essayé presque toutes les réponses à des questions similaires sur le débordement de stack, mais rien ne semble fonctionner.
Est-ce que j’ai râté quelque chose?
Je suis sûr que ce problème a quelque chose à voir avec le pipeline des actifs, mais je ne sais pas comment le résoudre.
Quelqu’un peut-il s’il vous plaît jeter un oeil à cela et me conseiller.
Merci d’avance
Ok, si quelqu’un rencontre un problème similaire, vous pouvez consulter le config.assets.comstack
Dans mon cas, je n’ai eu qu’à changer le config.assets.comstack
config / config.assets.comstack
/ production.rb config.assets.comstack
de false
, je l’ai changé en true
et maintenant tout fonctionnait …. Il ne m’a fallu que deux jours pour le comprendre: D
Notez que public/assets
est l’endroit où le pipeline d’actifs met ses affaires. Si cela concerne les actifs statiques, je les placerais dans app/assets/images
pour utiliser le pipeline de ressources ou choisir un autre nom de répertoire.
J’utilisais la balise img de html pour servir des images comme suit
Il suffisait de changer pour suivre et cela a fonctionné.
<%= image_tag 'AdminLTELogo.png' , alt: "AdminLTE Logo", class: "brand-image im %>
À votre santé.