2017-01-27 5 views
1

사람들이 단순한 웹 사이트에 대한 스킨/테마를 만들 수있는 Rails/Heroku 앱을 만들려고합니다.사용자를위한 CSS 파일 호스팅

현재 페이지를 테마로 삼고 CSS 파일을 다운로드하여 사이트에 삽입 할 수있는 프로토 타입이 있습니다. CSS 파일을 다운로드하도록 강요하는 것이 아니라 사용자를 위해 CSS 파일을 호스팅 할 수있는 옵션을 원합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 이상적으로 사용자가 만든 CSS 파일은 해당 도메인에서만 작동합니다.

나는 CDN에 대해 전혀 몰라 GitHub 또는 Google에서 비슷한 오픈 소스 예제를 찾을 수 없습니다. 이 기능을 수행하는 가장 좋은 방법에 대한 지침이 있다면 정말 감사하겠습니다.

+1

아마존 AWS를 살펴볼 것입니다. [paperclip, dragonfly 또는 carrierwave] (https://infinum.co/the-capsized-eight/best-rails-image-uploader-paperclip-carrierwave)를 통해 레일과 통합 할 수 있습니다 -refile). 파일 업로드 및 호스팅 (특히 CSS 파일 제외)의 관점에서 문제를 접근하려고 시도하면 자습서 및 리소스가 많이 있음을 알 수 있습니다. – max

답변

0

사용자가 원하는대로 지정할 수 있는지에 따라 다릅니다. 기존 프레임 워크의 색상을 선택할 수있게 하시겠습니까? 아니면 자신 만의 완전한 사용자 정의 스타일 시트를 업로드 할 수있게 하시겠습니까?

보안을 위해 사용자가 자신의 사용자 정의 스타일 시트를 추가하도록 허용하는 경우 css가 감염되어 사용자가 악의적 인 코드를 실행할 수 없도록해야합니다 (예 : this answer 참조). 당신은 단지 사용자가 기존의 테마를 사용자 정의 할 수있게하려면

, 당신은 사용자 has_one처럼 뭔가를 할 수 : 스타일을

class StylesController < ApplicationController 
def create 
    @style = current_user.build_style(style_params) 
    if @style.save 
     flash[:success] = "Style saved!" 
    end 
    end 

    def show 
    @style = Style.find(params[:id]) 

    respond_to do |format| 
     format.html 
     format.css 
    end 
    end 

    private 

    def style_params 
    params.require(:style).permit(:name, :font1, :color1, :color2, :color3, :color4, :fontsize) 
    end 

플러스 형태는 사용자가 정의 할 수 있도록하려는 속성을 편집 할 경우 ,

.text-primary { 
    color: <%= @style.color1 %>; 
} 

def user_style(user) 
    if user.style.present? 
    content_for :stylesheet_includes do 
     stylesheet_link_tag user.style.path, media: 'all', 'data-turbolinks-track' => "reload" 
    end 
    end 
end 
같은 도우미와 사용자의 페이지에 스타일 시트를로드 같은과 show.css.erb application.html.erb 헤더에

<%= yield :stylesheet_includes %>'data-turbolinks-track' => "reload"은 터보 링크가 한 사용자의 사용자 정의 스타일 시트를 다른 사용자의 도메인에 유지하지 못하게하는 데 필요합니다.