Rails 4: สินทรัพย์ไม่โหลดในการผลิต


116

ฉันพยายามนำแอปไปใช้งานจริง แต่รูปภาพและเส้นทางเนื้อหา css ไม่ทำงาน

นี่คือสิ่งที่ฉันกำลังทำอยู่:

  • เนื้อหารูปภาพอยู่ใน /app/assets/images/image.jpg
  • สไตล์ชีตอยู่ใน /app/assets/stylesheets/style.css
  • ในเลย์เอาต์ของฉันฉันอ้างอิงไฟล์ css ดังนี้: <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %>
  • ก่อนที่จะรีสตาร์ทยูนิคอร์นฉันรันRAILS_ENV=production bundle exec rake assets:precompileและมันก็สำเร็จและฉันเห็นไฟล์ที่มีลายนิ้วมือในpublic/assetsไดเรกทอรี

เมื่อฉันเรียกดูไซต์ของฉันฉันได้รับข้อผิดพลาด 404 ไม่พบสำหรับmysite.com/stylesheets/styles.css.

ผมทำอะไรผิดหรือเปล่า?

อัปเดต: ในเค้าโครงของฉันมีลักษณะดังนี้:

<%= 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 %>

แหล่งสร้างคือ:

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

ดูเหมือนว่า Rails จะมองหาไฟล์ css ที่คอมไพล์ไม่ถูกต้อง แต่มันสับสนมากว่าทำไมมันถึงทำงานอย่างถูกต้องสำหรับจาวาสคริปต์ (สังเกต/assets/****.jsเส้นทาง)


คุณช่วยบอกเราได้ไหมว่าคุณโหลดไฟล์ css ของคุณอย่างไร ดูเหมือนว่าจากความผิดพลาดของคุณที่คุณพยายามที่จะ hardlink stylesheet_link_tagมันมากกว่าการใช้
กิ๊ก

1
เพิ่มเพียงด้านบน ฉันกำลังทำ<%= stylesheet_link_tag "style", media: "all", "data-turbolinks-track" => true %>
emersonthis

ตกลงดังนั้นฉันจะแนะนำสองสิ่ง: 1. ตรวจสอบในซอร์สที่สร้างขึ้นหากบรรทัดนี้เขียนเป็นพา ธpublic/assetsและ 2. ตรวจสอบอีกครั้งว่าไม่มีคำสั่งอื่นใดที่พยายามโหลดไฟล์ css นั้น (น่าจะฮาร์ดโค้ด)
kik

ฉันไม่สามารถพูดได้ว่าการใช้. erb มีปัญหาหรือไม่เพราะฉันไม่เคยทำเช่น.home {background: #FFF url(<%= image_path 'hippopotamus.jpg' %>) no-repeat; }นั้นจริง ๆ แล้วสามารถเปลี่ยนเป็น sprocket ด้วย.home {background: #FFF url(image-path('hippopotamus.jpg')) no-repeat; }. บางทีคุณอาจลองถ้าสิ่งนี้ช่วยได้
กิ๊ก

คุณกำลังบอกว่าฉันสามารถทำการอ้างอิงในไฟล์ css แบบไดนามิกโดยไม่ต้องเพิ่มนามสกุล. erb ได้หรือไม่? ฉันเปลี่ยนเพราะไม่ต้องการให้ลิงก์พังเมื่อฉันอยู่ในโหมดการพัฒนา
emersonthis

คำตอบ:


105

ในราง 4 คุณต้องทำการเปลี่ยนแปลงด้านล่าง:

config.assets.compile = true
config.assets.precompile =  ['*.js', '*.css', '*.css.erb'] 

สิ่งนี้ใช้ได้กับฉัน ใช้คำสั่งต่อไปนี้เพื่อรวบรวมเนื้อหาล่วงหน้า

RAILS_ENV=production bundle exec rake assets:precompile

ขอให้โชคดี!


11
ฉันคิดว่าการตั้งค่า config.assets.compile เป็น true จะฆ่าประสิทธิภาพในการผลิต ยัง css.erb? ใครใช้? แล้วแซสกับกาแฟล่ะ?
ahnbizcad

เมื่อมีการร้องขอไฟล์ coffee และ sass ไฟล์เหล่านั้นจะถูกประมวลผลโดยตัวประมวลผลที่มีให้โดย coffee-script และ sass-rail gems จากนั้นส่งกลับไปยังเบราว์เซอร์เป็น JavaScript และ CSS ตามลำดับ
Rameshwar Vyevhare

1
ปัญหานี้ได้รับการแก้ไขแล้วสำหรับ Rails 4 และไม่จำเป็นต้องใช้อัญมณี turbo-sprocket-rail3
Rameshwar Vyevhare

4
ขออภัยฉันไม่สามารถเชื่อมโยงสิ่งที่คุณพูดเพื่อตอบคำถามของฉันได้
ahnbizcad

1
โดยปกติเมื่อคุณเรียกใช้เซิร์ฟเวอร์การผลิตคุณจะเรียกใช้ Rails กับผู้โดยสารหรือยูนิคอร์นหรือเสือพูมาหลังเว็บเซิร์ฟเวอร์ Apache หรือ nginx จะดีกว่าถ้าปล่อยให้ Apache หรือ nginx ให้บริการไฟล์แบบคงที่ (js, css, รูปภาพ) และเซิร์ฟเวอร์แอ็พพลิเคชัน Rails (puma, ยูนิคอร์น) ให้บริการโค้ด Rails และเทมเพลต เพื่อที่จะทำเช่นนั้นคุณควรปิดconfig.serve_static_filesและนามแฝงในการกำหนดค่า Apache และ Nginx assetsที่จะจัดการกับ
ChâuHồngLĩnh

85

ฉันเพิ่งมีปัญหาเดียวกันและพบการตั้งค่านี้ใน config / environment / production.rb:

# Rails 4:
config.serve_static_assets = false

# Or for Rails 5:
config.public_file_server.enabled = false

เปลี่ยนเพื่อให้trueมันใช้งานได้ ดูเหมือนว่าโดยค่าเริ่มต้น Rails คาดว่าคุณจะกำหนดค่าเว็บเซิร์ฟเวอร์ส่วนหน้าของคุณเพื่อจัดการคำขอไฟล์จากโฟลเดอร์สาธารณะแทนที่จะพร็อกซีไปยังแอป Rails บางทีคุณอาจทำสิ่งนี้กับไฟล์จาวาสคริปต์ แต่ไม่ใช่สไตล์ชีท CSS ของคุณ?

( ดูเอกสาร Rails 5 ) ตามที่ระบุไว้ในความคิดเห็นกับทางรถไฟ 5 คุณก็อาจตั้งค่าตัวแปรสภาพแวดล้อมเนื่องจากการตั้งค่าเริ่มต้นคือRAILS_SERVE_STATIC_FILESconfig.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?


1
คำเตือนการเลิกใช้งาน: ตัวเลือกการกำหนดค่าconfig.serve_static_assetsได้รับการเปลี่ยนชื่อเพื่อconfig.serve_static_filesชี้แจงบทบาทของมัน (เพียงแค่เปิดใช้งานการให้บริการทุกอย่างในpublicโฟลเดอร์และไม่เกี่ยวข้องกับไปป์ไลน์เนื้อหา) serve_static_assetsนามแฝงจะถูกลบออกใน Rails 5.0 โปรดย้ายไฟล์การกำหนดค่าของคุณตามนั้น
yekta

ก่อนหน้านี้เมื่อฉันประสบปัญหานี้การเปลี่ยนแนวนั้นได้แก้ปัญหาให้ฉันแล้ว แต่ตอนนี้ฉันกำลังเผชิญหน้ากับมันอีกครั้ง (ฉันไม่รู้ว่าฉันจะจบลงในสถานการณ์เหล่านี้ได้อย่างไร) และนี่ยังไม่เพียงพอ มีข้อเสนอแนะเพิ่มเติมเกี่ยวกับสิ่งที่อาจผิดพลาดหรือไม่?
IIllIIll

2
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ แต่เป็นไปconfig.serve_static_filesในทางรถไฟ4.2และconfig.public_file_server.enabledในทางรถไฟ5 @see github.com/heroku/rails_serve_static_assets/blob/master/lib/…
Lucas Nelson

3
Rails 5.0.0.1 config / environment / production.rb มีconfig.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?เพื่อให้คุณสามารถตั้งค่านี้แตกต่างกันสำหรับสภาพแวดล้อมของคุณโดยไม่ต้องเปลี่ยนโค้ดที่เช็คอินใน SCM ของคุณ
tobinjim

ในการเปิดใช้งาน: "ส่งออก RAILS_SERVE_STATIC_FILES =" จากนั้นคุณเรียกใช้ "ราง s -e production" ปิดการใช้งาน: "unset RAILS_SERVE_STATIC_FILES"
Alfredo Osorio

32

ใน/config/environments/production.rbฉันต้องเพิ่มสิ่งนี้:

Rails.application.config.assets.precompile += %w( *.js ^[^_]*.css *.css.erb )

.js ได้รับการคอมไพล์ล่วงหน้าแล้ว แต่ฉันก็เพิ่มเข้าไปอยู่ดี ดูเหมือนว่า. css และ. css.erb จะไม่เกิดขึ้นโดยอัตโนมัติ ^[^_]ไม่รวม partials จากการรวบรวม - มันกับ regexp

เป็นเรื่องที่น่าผิดหวังเล็กน้อยที่เอกสารระบุอย่างชัดเจนว่าการเปิดใช้งานไปป์ไลน์เนื้อหาเป็นค่าเริ่มต้น แต่ไม่ได้ชี้แจงข้อเท็จจริงที่ใช้กับจาวาสคริปต์เท่านั้น


คุณต้องเพิ่ม styles.css ใน config.assets.precompile
Frederick Cheung

23

ฉันสามารถแก้ปัญหานี้ได้โดยการเปลี่ยน: config.assets.compile = falseเป็น
config.assets.compile = trueใน/config/environments/production.rb

อัปเดต (24 มิถุนายน 2018) : วิธีนี้ทำให้เกิดช่องโหว่ด้านความปลอดภัยหากเวอร์ชันของ Sprockets ที่คุณใช้น้อยกว่า 2.12.5, 3.7.2 หรือ 4.0.0.beta8


7
นี่ไม่ได้หมายความว่า Rails กำลังรวบรวมเนื้อหาแทนที่จะพูดว่ากำลังโหลดจาก CDN ใช่หรือไม่?
Benjamin Oakes

@BenjaminOakes ใช่และนั่นคือสิ่งที่ฉันต้องการ
Yanofsky

2
โหมดนี้ใช้หน่วยความจำมากกว่าทำงานได้ไม่ดีกว่าค่าเริ่มต้นและไม่แนะนำ ควรใช้ nginx proxy
yekta

16

สำหรับ Rails 5 คุณควรเปิดใช้งานรหัสกำหนดค่าต่อไปนี้:

config.public_file_server.enabled = true

โดยค่าเริ่มต้น Rails 5 จะมาพร้อมกับ config บรรทัดนี้:

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

ดังนั้นคุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อมRAILS_SERVE_STATIC_FILESเป็นจริง


1
สำหรับ Rails 5 ฉันควรเพิ่มฉันตั้งค่าpassenger_env_var RAILS_SERVE_STATIC_FILES true;ในบล็อกตำแหน่งของแอพของฉันในไฟล์ nginx.conf ของฉัน
Martin Velez

10

มี 2 ​​สิ่งที่คุณต้องทำให้สำเร็จเพื่อรับใช้สินทรัพย์ในการผลิต:

  1. คอมไพล์เนื้อหาล่วงหน้า
  2. ให้บริการเนื้อหาบนเซิร์ฟเวอร์ไปยังเบราว์เซอร์

1) ในการคอมไพล์เนื้อหาล่วงหน้าคุณมีหลายทางเลือก

  • คุณสามารถรันrake assets:precompileบนเครื่องโลคัลของคุณคอมมิตเข้ากับซอร์สโค้ดคอนโทรล (git) จากนั้นรันโปรแกรมการปรับใช้เช่น capistrano นี่ไม่ใช่วิธีที่ดีในการส่งเนื้อหาที่คอมไพล์ล่วงหน้าไปยัง SCM

  • คุณสามารถเขียนงานคราดที่รันRAILS_ENV=production rake assets:precompileบนเซิร์ฟเวอร์เป้าหมายทุกครั้งที่คุณปรับใช้แอป Rails กับการใช้งานจริงก่อนที่คุณจะรีสตาร์ทเซิร์ฟเวอร์

รหัสในงานสำหรับ capistrano จะมีลักษณะดังนี้:

on roles(:app) do
  if DEPLOY_ENV == 'production'
    execute("cd #{DEPLOY_TO_DIR}/current && RAILS_ENV=production rvm #{ruby_string} do rake assets:precompile")
  end
end

2) ตอนนี้คุณมีทรัพย์สินบนเซิร์ฟเวอร์ที่ใช้งานจริงคุณต้องให้บริการกับเบราว์เซอร์

อีกครั้งคุณมีหลายทางเลือก

  • เปิดไฟล์สแตติก Rails ที่ให้บริการในconfig / environment / production.rb

    config.serve_static_assets = true # old
    
    or
    
    config.serve_static_files = true # new

    การใช้ Rails เพื่อให้บริการไฟล์แบบคงที่จะฆ่าประสิทธิภาพของแอพ Rails

  • กำหนดค่า nginx (หรือ Apache) เพื่อให้บริการไฟล์แบบคงที่

    ตัวอย่างเช่น nginx ของฉันที่ได้รับการกำหนดค่าให้ทำงานกับ Puma มีลักษณะดังนี้:

    location ~ ^/(assets|images|fonts)/(.*)$ {
        alias /var/www/foster_care/current/public/$1/$2;
        gzip on;
        expires max;
        add_header Cache-Control public;
    }

4

Rails 4 จะไม่สร้างเนื้อหาเวอร์ชันที่ไม่ใช่ลายนิ้วมืออีกต่อไป: stylesheets / style.css จะไม่ถูกสร้างให้คุณ

หากคุณใช้stylesheet_link_tagลิงก์ที่ถูกต้องไปยังสไตล์ชีตของคุณจะถูกสร้างขึ้น

นอกจากนี้styles.cssควรอยู่ในconfig.assets.precompileรายการสิ่งที่คอมไพล์ไว้ล่วงหน้า


ฉันเห็นไฟล์ลายนิ้วมือในไดเร็กทอรี / public / assets / ในเค้าโครงของฉันฉันมีสิ่งนี้: <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %>สิ่งนี้ไม่ถูกต้องหรือไม่ `
emersonthis

ด้วยเหตุผลบางประการการปรับใช้การผลิตยังคงชี้ไปที่ไฟล์ต้นฉบับเมื่อฉันดูแหล่งที่มา<link data-turbolinks-track="true" href="https://stackoverflow.com/stylesheets/bootstrap.min.css" media="all" rel="stylesheet" />แต่ไฟล์จาวาสคริปต์นั้นถูกต้อง! ฉันไม่เข้าใจว่าทำไมการกำหนดค่าเดียวกันจึงใช้ได้กับไฟล์. js แต่ไม่ใช่. css
emersonthis

บน Rails 5.0.0.beta3 ฉันได้รับคำเตือนนี้: DEPRECATION WARNING: serve_static_filesเลิกใช้งานแล้วและจะถูกลบออกใน Rails 5.1 กรุณาใช้public_file_server.enabled = trueแทน
ย่า

@emerson นี่เหมือนกัน! โหลด js อย่างสมบูรณ์แบบ แต่บางไฟล์ css 404ที่ได้รับ คุณแก้ไขปัญหานี้หรือไม่
IvRRimUm

เกือบจะเป็นปัญหากับการกำหนดค่าท่อส่งเนื้อหาอยู่เสมอ หากคุณมีไฟล์ในตำแหน่งใด ๆ ที่ไม่ได้เป็นค่าเริ่มต้นนั่นเป็นปัญหาเกือบแน่นอนและคุณต้องบอกไปป์ไลน์เนื้อหาเกี่ยวกับเรื่องนี้โดยใช้คำตอบแรก
emersonthis

3

เปลี่ยนไฟล์ Production.rb ของคุณ

config.assets.compile = false

เข้าไป

config.assets.compile = true

และยังเพิ่ม

config.assets.precompile =  ['*.js', '*.css', '*.css.erb']

รวบรวมทำไม? เราไม่คิดว่าจะรวบรวมเกี่ยวกับการผลิตในขณะที่ดำเนินการอยู่
James Tan

1
อย่าทำแบบนี้! ทุกคนที่ตั้งค่า config.assets.compile เป็น true ในการผลิตควรถูกยิง
bkunzi01

2

ฉันใช้Ubuntu Server 14.04 , Ruby 2.2.1และRails 4.2.4ฉันได้ติดตามการปรับใช้งานจาก DigitalOceanและทุกอย่างเป็นไปด้วยดี แต่เมื่อฉันไปที่เบราว์เซอร์และป้อนที่อยู่ IP ของ VPS ของฉันแอปของฉันโหลด แต่ไม่มี รูปแบบและจาวาสคริปต์

app ที่ทำงานกับยูนิคอร์นและNginx ในการแก้ไขปัญหานี้ฉันได้เข้าสู่เซิร์ฟเวอร์ของฉันโดยใช้ SSH กับ'deployer'ของผู้ใช้ของฉันและไปที่เส้นทางแอพของฉันซึ่งเป็น'/ home / deployer / apps / blog'และเรียกใช้คำสั่งต่อไปนี้:

RAILS_ENV=production bin/rake assets:precompile

จากนั้นฉันก็รีสตาร์ท VPS เท่านี้เอง! ได้ผลสำหรับฉัน!

หวังว่าจะเป็นประโยชน์สำหรับคนอื่น ๆ !


2

หากตั้งค่าคอมไพล์ล่วงหน้าคุณไม่จำเป็นต้องใช้

config.assets.compile = true

เพราะนี่คือการแสดงสดเนื้อหา

ปัญหาของเราคือเรามีเพียงฐานข้อมูลลับของการพัฒนาเท่านั้น config/secrets.yml

development:
    secret_key_base: '83d141eeb181032f4070ae7b1b27d9ff'

ต้องการรายการสำหรับสภาพแวดล้อมการผลิต


1
ตามที่ระบุไว้ในคำตอบอื่น ๆ ที่คุณต้องการconfig.assets.precompile = ['*.js', '*.css', '*.css.erb'] และเรียกใช้RAILS_ENV=production bundle exec rake assets:precompile
xxjjnn

1
สิ่งนี้เปิดใช้งานการรวบรวมเนื้อหาในขณะที่ถ่ายทอดสดในการผลิตช้ามากไม่ถูกต้อง
James Tan

2

สิ่งที่คุณไม่ควรทำ:

เพื่อนร่วมงานของฉันบางคนข้างต้นแนะนำให้คุณทำสิ่งนี้:

config.serve_static_assets = true  ## DON”T DO THIS!! 
config.public_file_server.enabled = true ## DON”T DO THIS!!

ท่อส่งสินทรัพย์ทางรถไฟกล่าวถึงแนวทางข้างต้น:

โหมดนี้ใช้หน่วยความจำมากกว่าทำงานได้ไม่ดีกว่าค่าเริ่มต้นและไม่แนะนำ ดูที่นี่: ( http://edgeguides.rubyonrails.org/asset_pipeline.html#live-compilation )

สิ่งที่คุณควรทำ:

คอมไพล์เนื้อหาของคุณล่วงหน้า

RAILS_ENV=production rake assets:precompile

คุณสามารถทำได้ด้วยงานคราด


ทำไมต้องเพิ่ม build artefacts ใน git? คุณสามารถเพิ่มงานคราดในกระบวนการสร้างของคุณและหลีกเลี่ยง gitspam ขนาดใหญ่ (โดยเฉพาะอย่างยิ่งถ้าคุณมี uglifier และ gzipping ซึ่งคุณควร)
Dr.Strangelove

@ Dr.Strangelove ขอบคุณสำหรับความคิดเห็นของคุณ - ฉันไม่ทราบเรื่องนั้นมากพอ -: คุณสามารถอธิบาย / แก้ไขโพสต์ต้นฉบับได้หรือไม่?
BKSpurgeon

1

ตัวจับคู่เริ่มต้นสำหรับการรวบรวมไฟล์ประกอบด้วย application.js, application.css และไฟล์ที่ไม่ใช่ JS / CSS ทั้งหมด (ซึ่งจะรวมเนื้อหารูปภาพทั้งหมดโดยอัตโนมัติ) จากโฟลเดอร์ app / assets รวมถึงอัญมณีของคุณ:

หากคุณมีไฟล์ Manifest อื่น ๆ หรือแต่ละสไตล์ชีตและไฟล์ JavaScript ที่จะรวมไว้คุณสามารถเพิ่มเข้าไปในอาร์เรย์พรีคอมไพล์ใน config / initializers / assets.rb:

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

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


1

ก่อนอื่นให้ตรวจสอบทรัพย์สินของคุณอาจเป็นไปได้ว่ามีข้อผิดพลาดบางอย่างในการรวบรวมเนื้อหาล่วงหน้า

ในการคอมไพล์เนื้อหาล่วงหน้าในการใช้งานจริง ENV ให้รันคำสั่งนี้:

RAILS_ENV=production rake assets:precompile

หากแสดงข้อผิดพลาดให้ลบออกก่อน

ในกรณีที่เกิดข้อผิดพลาด "ตัวแปรที่ไม่ได้กำหนด" ให้โหลดไฟล์ตัวแปรนั้นก่อนที่จะใช้ในไฟล์อื่น

ตัวอย่าง:

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

ในไฟล์ application.rb ลำดับชุดของการคอมไพล์ล่วงหน้าของเนื้อหา

ตัวอย่าง:

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']

1

พบสิ่งนี้:

ตัวเลือกการกำหนดค่าconfig.serve_static_assetsถูกเปลี่ยนชื่อconfig.serve_static_filesเพื่อชี้แจงบทบาท

ใน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?

ดังนั้นตั้งค่า env RAILS_SERVE_STATIC_FILESหรือใช้Nginxเพื่อให้บริการไฟล์คงที่ Add config.serve_static_assets = trueจะยังใช้งานได้ แต่จะถูกลบในอนาคต


1

ไม่แนะนำให้ปล่อยให้คาปิสตราโนทำการคอมไพล์เนื้อหาล่วงหน้าเนื่องจากอาจใช้เวลานานและมักจะหมดเวลา พยายามทำการคอมไพล์เนื้อหาในระบบล่วงหน้า

ขั้นแรกตั้งค่าใน config / application.rb config.assets.initialize_on_precompile = false จากนั้นทำการ local RAILS_ENV=production bin/rake assets:precompile และเพิ่ม public / assets เหล่านั้นไปยัง git

และ config / environment / development.rb เปลี่ยนเส้นทางสินทรัพย์ของคุณเพื่อหลีกเลี่ยงการใช้เนื้อหาที่คอมไพล์ไว้ล่วงหน้า:

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

หากคุณมีปัญหาการเชื่อมต่อ db หมายความว่าคุณมี initializer ที่ใช้ db วิธีหนึ่งคือการตั้งค่าสภาพแวดล้อมใหม่โดยทำซ้ำ production.rb เป็นproduction2 .rb และใน database.yml ให้เพิ่มสภาพแวดล้อมproduction2ด้วยการตั้งค่าฐานข้อมูลการพัฒนา แล้วทำ

RAILS_ENV=production2 bin/rake assets:precompile

หากคุณยังคงประสบปัญหากับเนื้อหาเช่น ckeditor ให้เพิ่มไฟล์ js ลงใน config / initializers / assets.rb

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


0

ฉันอาจจะผิด แต่ผู้ที่แนะนำให้เปลี่ยน

config.assets.compile = true

ความคิดเห็นในบรรทัดนี้อ่านว่า # อย่าถอยกลับไปยังท่อส่งเนื้อหาหากพลาดเนื้อหาที่รวบรวมไว้ล่วงหน้า

สิ่งนี้ชี้ให้เห็นว่าการตั้งค่านี้เป็นจริงคุณไม่ได้แก้ไขปัญหา แต่เป็นการข้ามปัญหาและเรียกใช้ไปป์ไลน์ทุกครั้ง สิ่งนี้จะต้องฆ่าประสิทธิภาพของคุณและเอาชนะจุดประสงค์ของท่ออย่างแน่นอน?

ฉันมีข้อผิดพลาดเดียวกันนี้และเกิดจากการที่แอปพลิเคชันทำงานในโฟลเดอร์ย่อยที่รางไม่ทราบ

ดังนั้นไฟล์ css ของฉันที่อยู่ในบ้าน / โฟลเดอร์ย่อย / แอป / สาธารณะ / .... แต่รางกำลังมองหาในบ้าน / แอป / สาธารณะ / ...

ลองย้ายแอปของคุณออกจากโฟลเดอร์ย่อยหรือบอกทางรถไฟว่าอยู่ในโฟลเดอร์ย่อย


0
location ~ ^/assets/ {
  expires 1y;
  add_header Cache-Control public;
  add_header ETag "";
}

สิ่งนี้ช่วยแก้ปัญหาให้ฉันในการผลิต ใส่ลงในการกำหนดค่า nginx


0

แม้เราประสบปัญหาเดียวกันที่RAILS_ENV=production bundle exec rake assets:precompileประสบความสำเร็จ แต่สิ่งต่างๆไม่เป็นไปตามที่คาดหวัง
เราพบว่ายูนิคอร์นเป็นตัวการสำคัญของที่นี่

เช่นเดียวกับกรณีของคุณเราเคยรีสตาร์ทยูนิคอร์นหลังจากรวบรวมเนื้อหาแล้ว สังเกตเห็นว่าเมื่อเริ่มต้นยูนิคอร์นใหม่กระบวนการของผู้ปฏิบัติงานเท่านั้นที่จะเริ่มต้นใหม่ไม่ใช่กระบวนการหลัก
นี่คือสาเหตุหลักที่ไม่แสดงเนื้อหาที่ถูกต้อง

ต่อมาหลังจากรวบรวมเนื้อหาเราได้หยุดและเริ่มต้นยูนิคอร์นเพื่อให้กระบวนการหลักของยูนิคอร์นเริ่มต้นใหม่และได้รับการแสดงเนื้อหาที่ถูกต้อง
การหยุดและการเริ่มยูนิคอร์นจะทำให้เวลาหยุดทำงานประมาณ 10 วินาทีเมื่อเทียบกับการรีสตาร์ทยูนิคอร์น นี่คือวิธีแก้ปัญหาที่สามารถใช้ได้ในกรณีที่วิธีการแก้ปัญหาระยะยาวย้ายไปที่ puma จากยูนิคอร์น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.