预编译 Rails 5 以包含所有资产 [英] Precompile Rails 5 to Include all Assets

查看:42
本文介绍了预编译 Rails 5 以包含所有资产的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为生产预编译我的所有资产.当我运行 RAILS_ENV=production bundle exec rake assets:precompile 时,并非我的所有资产都在预编译.我曾尝试使用其他人在其他类似问题中建议的方法,但它们对我不起作用.首先,这里是我的 assets.rb 的样子:

I am trying to precompile all of my assets for production. When I run RAILS_ENV=production bundle exec rake assets:precompile not all of my assets are precompiling. I have tried to use the methods that others have suggested in other similar questions but they have not worked for me. For starters here is what my assets.rb looks like:

Rails.application.config.assets.version = '1.0'


Rails.application.config.assets.paths << Rails.root.join('node_modules')



Rails.application.config.assets.precompile += %w(creative/manifest.js creative/manifest.css images/* bootstrap/* fonts/* magnific-popup/* morphext/* owlcarousel2/* rs-plugin-5/* stylesheets/* javascripts/*)

如您所见,我在预编译的位置尝试添加例如 directory/* 以包含所有内容.以下是我尝试包含的文件及其中的所有内容(位于 Assets 目录中):

As you can see where I am precompiling I have tried to add for example directory/* to include everything. Here are the files I am trying to include and everything in them (These are in the Assets directory):

bootstrap  
fonts   
javascripts     
morphext      
rs-plugin-5
config     
images  
magnific-popup  
owlcarousel2  
stylesheets

这是我运行预编译时在我的公共目录中预编译的内容 看看公共下的图像,您可以看到许多目录不在那里,我什至打开了每个文件夹以查看它们是否存在在另一个文件夹中,什么也没有:

Here is what is precompiling in my public directory when I run the precompile take a look at the image under public and as you can see many of the directories are not in there I have even opened up each folder to see if they are in another folder and no nothing is there:

最后一部分是当我运行 rails s -e production 并导航到 Localhost:3000 时,我不断收到 500 错误,但没有任何显示.chrome 的控制台和终端都没有错误,所以我看不到我的页面在本地生产时的样子.任何帮助将不胜感激.

The last part is when I run rails s -e production and I navigate to Localhost:3000 I keep getting a 500 error and nothing is showing. There are no errors in the console in chrome nor the terminal so I cannot see what my page would look like locally for production. Any help will be greatly appreciated.

更新

这是我的 production.log,它似乎没有获得必要的资产:

Here is my production.log it looks like it is not getting the necessary assets:

I, [2017-09-12T18:43:54.606853 #7393]  INFO -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c] Started GET "/" for 127.0.0.1 at 2017-09-12 18:43:54 -0700
I, [2017-09-12T18:43:54.625461 #7393]  INFO -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c] Processing by CreativesController#index as HTML
I, [2017-09-12T18:43:54.642161 #7393]  INFO -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c]   Rendering creatives/index.html.erb within layouts/application
I, [2017-09-12T18:43:54.644418 #7393]  INFO -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c]   Rendered creatives/index.html.erb within layouts/application (2.1ms)
I, [2017-09-12T18:43:54.644629 #7393]  INFO -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c] Completed 500 Internal Server Error in 19ms
F, [2017-09-12T18:43:54.645433 #7393] FATAL -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c]   
F, [2017-09-12T18:43:54.645478 #7393] FATAL -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c] ActionView::Template::Error (The asset "AdobeStock_95578405.jpeg" is not present in the asset pipeline.):
F, [2017-09-12T18:43:54.645761 #7393] FATAL -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c]     17:                 <li data-transition="slidehorizontal" data-slotamount="default" data-masterspeed="default" data-title="Next Generation Care">
[b2f4fb53-c1ea-4d59-8045-44167c60416c]     18:                 
[b2f4fb53-c1ea-4d59-8045-44167c60416c]     19:                 <!-- main image -->
[b2f4fb53-c1ea-4d59-8045-44167c60416c]     20:                 <%= image_tag "AdobeStock_95578405.jpeg" ,alt: "slidebg1", :data => {bgposition: "center bottom",bgrepeat: "no-repeat", bgfit: "cover"} , :class => "rev-slidebg" %>
[b2f4fb53-c1ea-4d59-8045-44167c60416c]     21: 
[b2f4fb53-c1ea-4d59-8045-44167c60416c]     22:                 <!-- Transparent Background -->
[b2f4fb53-c1ea-4d59-8045-44167c60416c]     23:                 <div class="tp-caption dark-translucent-bg"
F, [2017-09-12T18:43:54.645799 #7393] FATAL -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c]   
F, [2017-09-12T18:43:54.645828 #7393] FATAL -- : [b2f4fb53-c1ea-4d59-8045-44167c60416c] app/views/creatives/index.html.erb:20:in `_app_views_creatives_index_html_erb___200307797594027740_70304554688000'
I, [2017-09-12T18:43:54.734601 #7393]  INFO -- : [8f353cbb-4884-4c2c-896d-ba60b58caa61] Started GET "/favicon.ico" for 127.0.0.1 at 2017-09-12 18:43:54 -0700
F, [2017-09-12T18:43:54.735010 #7393] FATAL -- : [8f353cbb-4884-4c2c-896d-ba60b58caa61]   
F, [2017-09-12T18:43:54.735048 #7393] FATAL -- : [8f353cbb-4884-4c2c-896d-ba60b58caa61] ActionController::RoutingError (No route matches [GET] "/favicon.ico"):
F, [2017-09-12T18:43:54.735071 #7393] FATAL -- : [8f353cbb-4884-4c2c-896d-ba60b58caa61]   
F, [2017-09-12T18:43:54.735100 #7393] FATAL -- : [8f353cbb-4884-4c2c-896d-ba60b58caa61] actionpack (5.1.3) lib/action_dispatch/middleware/debug_exceptions.rb:63:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] actionpack (5.1.3) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] railties (5.1.3) lib/rails/rack/logger.rb:36:in `call_app'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] railties (5.1.3) lib/rails/rack/logger.rb:24:in `block in call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] activesupport (5.1.3) lib/active_support/tagged_logging.rb:69:in `block in tagged'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] activesupport (5.1.3) lib/active_support/tagged_logging.rb:26:in `tagged'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] activesupport (5.1.3) lib/active_support/tagged_logging.rb:69:in `tagged'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] railties (5.1.3) lib/rails/rack/logger.rb:24:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] actionpack (5.1.3) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] actionpack (5.1.3) lib/action_dispatch/middleware/request_id.rb:25:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] rack (2.0.3) lib/rack/method_override.rb:22:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] rack (2.0.3) lib/rack/runtime.rb:22:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] activesupport (5.1.3) lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] actionpack (5.1.3) lib/action_dispatch/middleware/executor.rb:12:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] rack (2.0.3) lib/rack/sendfile.rb:111:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] railties (5.1.3) lib/rails/engine.rb:522:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] puma (3.10.0) lib/puma/configuration.rb:225:in `call'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] puma (3.10.0) lib/puma/server.rb:605:in `handle_request'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] puma (3.10.0) lib/puma/server.rb:437:in `process_client'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] puma (3.10.0) lib/puma/server.rb:301:in `block in run'
[8f353cbb-4884-4c2c-896d-ba60b58caa61] puma (3.10.0) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
I, [2017-09-12T18:43:58.249911 #7393]  INFO -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26] Started GET "/" for 127.0.0.1 at 2017-09-12 18:43:58 -0700
I, [2017-09-12T18:43:58.251066 #7393]  INFO -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26] Processing by CreativesController#index as HTML
I, [2017-09-12T18:43:58.252212 #7393]  INFO -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26]   Rendering creatives/index.html.erb within layouts/application
I, [2017-09-12T18:43:58.253079 #7393]  INFO -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26]   Rendered creatives/index.html.erb within layouts/application (0.7ms)
I, [2017-09-12T18:43:58.253250 #7393]  INFO -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26] Completed 500 Internal Server Error in 2ms
F, [2017-09-12T18:43:58.254061 #7393] FATAL -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26]   
F, [2017-09-12T18:43:58.254123 #7393] FATAL -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26] ActionView::Template::Error (The asset "AdobeStock_95578405.jpeg" is not present in the asset pipeline.):
F, [2017-09-12T18:43:58.254377 #7393] FATAL -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26]     17:                 <li data-transition="slidehorizontal" data-slotamount="default" data-masterspeed="default" data-title="Next Generation Care">
[2e6342ac-ec61-410c-98ba-ae205fb9cc26]     18:                 
[2e6342ac-ec61-410c-98ba-ae205fb9cc26]     19:                 <!-- main image -->
[2e6342ac-ec61-410c-98ba-ae205fb9cc26]     20:                 <%= image_tag "AdobeStock_95578405.jpeg" ,alt: "slidebg1", :data => {bgposition: "center bottom",bgrepeat: "no-repeat", bgfit: "cover"} , :class => "rev-slidebg" %>
[2e6342ac-ec61-410c-98ba-ae205fb9cc26]     21: 
[2e6342ac-ec61-410c-98ba-ae205fb9cc26]     22:                 <!-- Transparent Background -->
[2e6342ac-ec61-410c-98ba-ae205fb9cc26]     23:                 <div class="tp-caption dark-translucent-bg"
F, [2017-09-12T18:43:58.254415 #7393] FATAL -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26]   
F, [2017-09-12T18:43:58.254442 #7393] FATAL -- : [2e6342ac-ec61-410c-98ba-ae205fb9cc26] app/views/creatives/index.html.erb:20:in `_app_views_creatives_index_html_erb___200307797594027740_70304554688000'

更新 2

这是我的资产文件夹结构的图像:

Here is the image of my asset folder structure:

我还注意到还有另一个 assets 文件夹,因为它正在预编译 rs-plugin 的结构,而不是其他文件夹,请参见图像:

I also noticed that there is another assets folder because it is precompiling the rs-plugin's structure and not the other folders see image:

这是我的 application.rb:

Here is my application.rb:

require_relative 'boot'

require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module Cnd
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.1
    config.assets.paths << Rails.root.join("app", "assets", "fonts")
    config.assets.paths << Rails.root.join("app", "assets", "images")
    config.assets.paths << Rails.root.join("app", "assets", "bootstrap")
    config.assets.paths << Rails.root.join("app", "assets", "rs-plugin-5")
    config.assets.paths << Rails.root.join("app", "assets", "magnific-popup")
    config.assets.paths << Rails.root.join("app", "assets", "owlcarousel2")
    config.assets.paths << Rails.root.join("app", "assets", "morphext")

    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.
  end
end

推荐答案

Rails.application.config.assets.precompile += %w(creative/manifest.js creative/manifest.css images/* bootstrap/* fonts/* magnific-popup/* morphext/* owlcarousel2/* rs-plugin-5/* stylesheets/* javascripts/*)

但正如我从您的屏幕截图中看到的,您的 public/assets 目录中有一个名为 assets 的文件夹.

but as I see from your screenshot you have a folder named assets inside your public/assets directory.

您的指纹文件预编译文件位于 public/assets/assets 而不是 public/assets

Your fingerprinted-files precompiled files are inside public/assets/assets instead of public/assets

这意味着,如果这些文件被推送到生产环境(检查它们是否在您的 git 存储库中,如果没有执行 git add),您将无法在以下位置看到它们路径 localhost:3000/assets/ 因为你的目录结构改变了,也许你可以在 localhost:3000/assets/assets/ 显示它们>,但如果我是你,我会保持正常的目录结构.

This means that if those files are being push to production (check that they are in your git repository, if not do a git add), you are not going to be able to see them at the path localhost:3000/assets/<nameofyourfile> because your directory structure is changed, maybe you could display them at localhost:3000/assets/assets/<nameofyourfile>, but If I was you I would keep the normal directory structure.

预编译您的资产意味着创建它的指纹版本

通过说我想预编译我的所有资产,您是说您希望在资产管道中添加或编辑的所有文件生成预编译的指纹版本以用于生产.

By saying I want to precompile all my assets you are saying that you want all the files added or edited in your asset pipeline to generate a precompiled fingerprinted version to be used in production.

预编译是如何工作的?您可以阅读资产管道文档的第 4.1 章,基本上链轮使用一个名为.sprockets-manifest-fingerprint.json 来检查哪个是最新版本的指纹文件用于生产.这就是为什么有时删除 public/assets 文件夹可以解决问题的原因,因为您删除了所有旧文件,包括 sprockets-manifest.json 可能未使用最新指纹更新.

How does precompilation works? You can read chapter 4.1 of the Asset Pipeline Documentation, basically sprockets uses a file called .sprockets-manifest-fingerprint.json to check which is the latest version of the fingerprinted files to use in production. This is why sometimes deleting the public/assets folder solves problems, because you delete all the old files including the sprockets-manifest.json which may not be updated with the latest fingerprint.

如果在您的 public/assets 文件夹中没有找到它们,开发也会回退到您的 app/assets 文件夹中的文件,这就是为什么你会得到仅在生产中出错.您可以阅读了解如何禁用此行为

Also development will fallback to the files in your app/assets folder if it does not find them in your public/assets folder, that is why you are getting the error only in production. You can read hear how to disable this behaviours

第 3.1 和 3.2 章

所以执行这些步骤,因为错误通常在开发中更容易解决,因为您不必推送 git 来查看结果.有时文件包含在 .gitignore 中,或者您需要使用 git add app/assets//

So do those steps, because errors are usually easier to solve in development, as you do not have to push a git to see the result. Sometimes files are included in .gitignore or you need to manually add that file with git add app/assets/<nameofthefolder>/<nameofthefile>

此外,我们确实在屏幕截图中看到了您的 public 文件夹,但我们没有看到您的 app/assets 文件夹结构和您的任何链轮设置,所以也许是不是为了获得解决方案而对问题进行悬赏,而只是向我们提供找到解决方案所需的信息.

Also we did see your public folder in the screenshot, but we did not see you app/assets folder structure and any of your sprockets settings, so maybe it is not about adding a bounty to the question to get a solution, but just giving us the information necessary to find the solution.

现在这是一个基于意见的通用问题

Right now this is a generic opinion based question

另外我相信您通过执行 config.assets.prefix = "/some_other_path"

这篇关于预编译 Rails 5 以包含所有资产的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆