125 votes

Rails 4 : les actifs ne se chargent pas en production

J'essaie de mettre mon application en production et les chemins d'accès aux images et aux fichiers CSS ne fonctionnent pas.

Voici ce que je fais actuellement :

  • Les images se trouvent dans /app/assets/images/image.jpg
  • Les feuilles de style se trouvent dans /app/assets/stylesheets/style.css
  • Dans ma mise en page, je fais référence au fichier css comme ceci : <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %>
  • Avant de redémarrer la licorne, j'exécute RAILS_ENV=production bundle exec rake assets:precompile et cela réussit et je vois les fichiers empreintes digitales dans le fichier public/assets répertoire.

Lorsque je navigue sur mon site, j'obtiens une erreur 404 non trouvée pour mysite.com/stylesheets/styles.css .

Qu'est-ce que je fais de mal ?

Mise à jour : Dans ma mise en page, cela ressemble à ceci :

<%= stylesheet_link_tag    "bootstrap.min", media: "all", "data-turbolinks-track" => true %>
<%= stylesheet_link_tag    "styles", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

La source de génération est la suivante :

<link data-turbolinks-track="true" href="stackoverflow.com/stylesheets/bootstrap.min.css" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="stackoverflow.com/stylesheets/styles.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-0c647c942c6eff10ad92f1f2b0c64efe.js"></script>

On dirait que Rails ne recherche pas correctement les fichiers css compilés. Mais c'est très confus pourquoi il fonctionne correctement pour les javascripts (remarquez l'icône /assets/****.js chemin).

2voto

ClothSword Points 1559

Si la précompilation est activée, vous N'AVEZ PAS besoin de

config.assets.compile = true

que c'est pour servir des actifs vivants.

Notre problème était que nous n'avions qu'une base de clés secrètes de développement définie en config/secrets.yml

development:
    secret_key_base: '83d141eeb181032f4070ae7b1b27d9ff'

Besoin de saisie pour l'environnement de production

1voto

FreePender Points 2595

Le sélecteur par défaut pour la compilation des fichiers comprend les fichiers application.js, application.css et tous les fichiers non-JS/CSS (ce qui inclut automatiquement toutes les images) des dossiers app/assets, y compris vos gems :

Si vous avez d'autres manifestes ou des feuilles de style individuelles et des fichiers JavaScript à inclure, vous pouvez les ajouter au tableau de précompilation dans config/initializers/assets.rb :

Rails.application.config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']

http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

1voto

Chitresh goyal Points 1

Tout d'abord, vérifiez vos actifs, il se peut qu'il y ait une erreur dans la pré-compilation des actifs.

Pour précompiler les actifs en production ENV, exécutez cette commande :

RAILS_ENV=production rake assets:precompile

S'il affiche une erreur, supprimez-la d'abord,

En cas d'erreur "variable indéfinie", chargez le fichier de cette variable avant de l'utiliser dans un autre fichier.

exemple :

@import "variables";
@import "style";

dans le fichier application.rb, définir la séquence de précompilation des actifs

exemple :

config.assets.precompile += [ 'application.js', 'admin.js', 'admin/events.js', 'admin/gallery.js', 'frontendgallery.js']

config.assets.precompile += [ 'application.css', 'admin.css','admin/events.css', 'admin/gallery.css', 'frontendgallery.css']

1voto

Daniel Wei Points 514

J'ai trouvé ça :

L'option de configuration config.serve_static_assets a été renommé en config.serve_static_files pour clarifier son rôle.

sur config/environments/production.rb :

# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

Il faut donc définir env RAILS_SERVE_STATIC_FILES ou en utilisant Nginx pour servir des fichiers statiques. Ajouter config.serve_static_assets = true fonctionnera toujours, mais sera supprimé à l'avenir.

1voto

James Tan Points 35

Il n'est pas recommandé de laisser capistrano faire la précompilation des actifs, car cela peut prendre des heures et souvent s'arrêter. essayez de faire la précompilation des actifs locaux.

1er, défini dans config/application.rb config.assets.initialize_on_precompile = false alors faire local RAILS_ENV=production bin/rake assets:precompile et ajoutez ces actifs publics à git.

et config/environnements/development.rb, modifiez le chemin des ressources pour éviter d'utiliser des ressources précompilées :

config.assets.prefix = '/dev-assets'

Si vous avez un problème de connexion à la base de données, cela signifie que vous avez un initialisateur qui utilise la base de données. Une façon de le contourner est de définir un nouvel environnement en dupliquant production.rb comme suit production2 .rb, et dans database.yml, ajoutez production2 environnement avec développement db setting. then do

RAILS_ENV=production2 bin/rake assets:precompile

si vous rencontrez toujours des problèmes avec les actifs, par exemple ckeditor, ajouter le fichier js dans config/initializers/assets.rb

Rails.application.config.assets.precompile += %w( ckeditor.js )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X