rails - atout application.css introuvable en mode production
Je me suis mise à niveau d'une application à utiliser l'asset pipeline.
J'ai le css actifs de la compilation d'une application fichier css, mais ils ne pas être trouvé lorsque je lance l'application en mode de production avec
RAILS_ENV=production bundle exec rails s
et je visite une page, je reçois le bon de sortie à partir de la base de données, mais pas de style et le journal indique:
ActionController::RoutingError (No route matches [GET]
"/assets/default.scss-1a27c...f07c.css"):
Même si ce fichier existe dans le public/actifs
$ ls public/assets/def*
public/assets/default.scss-1a27c...f07c.css public/assets/default.scss.css
public/assets/default.scss-1a27c...f07c.css.gz public/assets/default.scss.css.gz
Que dois-je changer pour obtenir le serveur pour trouver le fichier d'asset?
Même chose se passe pour mes autres .les fichiers css. Ils compilé en public/actifs, avec des traces de doigts, mais ne sont-ils pas trouvé.
Source de la Page est de montrer:
<link href="/assets/default.scss-1a27c...f07c.css"
media="screen" rel="stylesheet" type="text/css" />
Les rails (haml) source = stylesheet_link_tag 'default.scss.css'
public.assets
curently comprend les fichiers suivants.
$ ls public/assets/def*
public/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css
public/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css.gz
public/assets/default.scss.css
public/assets/default.scss.css.gz
application.rb a
$ cat config/application.rb
require File.expand_path('../boot', __FILE__)
# Pick the frameworks you want:
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"
# require "rails/test_unit/railtie"
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require(*Rails.groups(:assets => %w(development test)))
# If you want your assets lazily compiled in production, use this line
# Bundler.require(:default, :assets, Rails.env)
end
module Linker
class Application < Rails::Application
config.encoding = "utf-8"
config.filter_parameters += [:password]
config.assets.enabled = true
config.assets.initialize_on_precompile = false # For Heroku
config.assets.version = '1.0'
end
end
config/environments/production
a:
$ cat config/environments/production.rb
Linker::Application.configure do
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.assets.precompile += ['default.scss.css','main.css', 'jquery-ui-1.8.22.custom.css']
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
config.log_level = :debug
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
end
Cela semble être le cas pour tous les actifs, par exemple
Started GET "/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css"):
Started GET "/assets/main-6864687b4114a1c316e444bd90f233ff.css" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/main-6864687b4114a1c316e444bd90f233ff.css"):
Started GET "/assets/jquery-ui-1.8.22.custom-24319b4b1218846a3fe22a0479ae98b4.css" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/jquery-ui-1.8.22.custom-24319b4b1218846a3fe22a0479ae98b4.css"):
Started GET "/assets/application-fc1d492d730f2a45581a40eac4607db8.js" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/application-fc1d492d730f2a45581a40eac4607db8.js"):
Started GET "/images/link.ico" for 127.0.0.1 at 2014-02-23 10:24:48 -0500
ActionController::RoutingError (No route matches [GET] "/images/link.ico"):
source d'informationauteur Michael Durrant
Vous devez vous connecter pour publier un commentaire.
Rails par défaut ne sert pas les actifs sous
public
. Voir votreproduction.rb
:Changement de vrai et vous êtes bon pour aller. (Remarque: vous ne voulez pas que pour être
true
dans la production, n'oubliez pas de revenir avant de déployer!)Voir La Configuration Des Applications Rails pour plus de détails.
Dans les Rails 4, vous pouvez les obtenir à afficher dans la production (s'exécutant localement), en passant par une variable d'environnement:
RAILS_SERVE_STATIC_FILES=true rails server -e production
Cela devrait fonctionner aussi longtemps que vous avez cette ligne dans
/config/environments/production.rb
:config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].présenter?
Les Rails 5 solution est similaire à la Rails 4 solution donné par Jules Copeland ci-dessus.
Dans votre pré-généré
config/environments/production.rb
fichier, il devrait y avoir une entrée qui ressemble à quelque chose comme ceci:J'ai trouvé une bonne explication de ce paramètre dans le La configuration des Applications Rails guide à http://guides.rubyonrails.org:
Conclusion: Dans la production, à partir de votre serveur rails avec
RAILS_SERVE_STATIC_FILES=1
permettra Rails pour servir tous les fichiers dans le public/assets tout comme un serveur web serait. Gardez à l'esprit, Rail est un serveur d'application et ne le fera pas aussi efficacement qu'un serveur web (par exemple, NGINX, Apache, etc...). Pour les applications du monde réel, vous devez disposer d'un serveur web dédié assis en face de Rails qui servira à la statique de l'actif par lui-même et ne vous embêtez pas sur les Rails de contenu dynamique en tant que de besoin. Pour plus de détails, voir cet article par Justin Weiss sur les différences entre les serveurs web et les serveurs d'application.Lorsque vous ne
rake assets:precompile
vos biens vont dans le répertoire public. Voyez si vous pouvez trouver ces fichiers danspublic/assets/
Vous devriez voir quelque chose comme ceci: