Vue.js+Vuetify+Rails에서 heroku 배포 후 스타일이 무너질 때 해결

개요


  • hello_vue.js에 쓰여진 모든 내용을 application.js로 옮긴다
  • application.html.erb의 stylesheet_link_tag를 stylesheet_pack_tag로 변경

  • 전제 조건



    다음 명령으로 새 앱을 만듭니다.
    % rails new xxx --webpack=vue
    

    디렉토리 구성


    대처법



    hello_vue.js에 작성된 모든 내용을 application.js로 이동



    기본적으로 hello_vue.js에 Vue 인스턴스를 생성하는 코드가 작성됩니다.

    javascript/packs/hello_vue.js
    import Vue from 'vue'
    import App from '../app.vue'
    
    document.addEventListener('DOMContentLoaded', () => {
      const app = new Vue({
        render: h => h(App)
      }).$mount()
      document.body.appendChild(app.$el)
    
      console.log(app)
    })
    

    이 모든 것을 application.js로 옮깁니다. ↓

    javascript/packs/application.js
    require("@rails/ujs").start()
    require("turbolinks").start()
    require("@rails/activestorage").start()
    require("channels")
    // 以下、hello_vue.jsから移してきたコード
    import Vue from 'vue'
    import App from '../app.vue'
    
    document.addEventListener('DOMContentLoaded', () => {
      const app = new Vue({
        render: h => h(App)
      }).$mount()
      document.body.appendChild(app.$el)
    
      console.log(app)
    })
    

    application.html.erb의 stylesheet_link_tag를 stylesheet_pack_tag로 변경



    views/layouts/application.html.erb
    <!DOCTYPE html>
    <html>
      <head>
        <title>Webpackvue</title>
        <%= csrf_meta_tags %>
        <%= csp_meta_tag %>
    -   <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    +   <%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
        <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
      </head>
    
      <body>
        <%= yield %>
      </body>
    </html>
    

    좋은 웹페이지 즐겨찾기