2012-10-20 2 views
2

나는 sinatra에서 전에 한 번도 해 본 적이 없으며 프로젝트에서 시도해보기로 결정했습니다. 나는 스크립트 로딩이 어떻게 작동하는지 혼란 스럽다. 간헐적으로 작동하는 것 같습니다. 때로는 2 개의 스크립트/css 파일에 내부 서버 오류가 있으며 때로는 모두 오류가 발생합니다. 내가 공용 폴더/공공/자산의 내부 자산 폴더가sinatra에서 스크립트를 올바르게로드합니까?

<!doctype html> 

<html> 

    <head> 
    <title>An HTML5 box of sand</title> 
    <meta charset="utf-8" /> 

    <link href='http://fonts.googleapis.com/css?family=Arvo' rel='stylesheet' type='text/css'> 

    <link rel="stylesheet/less" type="text/css" href="/assets/stylesheets/style.less"> 

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script><!--loads jquery--> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script><!--loads jquery ui--> 
    <script type="text/javascript" src="/assets/js/lib/handlebars.js"></script> 
    <script src="/assets/js/lib/less-1.3.0.min.js" type="text/javascript"></script> 
    <script type="text/javascript" src="/assets/js/script.js"></script><!--This is the place where you play!!!--> 

    </head> 

<body> 
<%= yield %> 
</body> 

</html> 

:

이 내 layout.erb입니다. 때로는 assets/js/script.js 파일을로드하고 핸들 막대 파일을로드하지 않기 때문에 이상합니다. 다른 시간에는 script.js 파일이 아닌 핸들 바를로드합니다. 무슨 일이 일어나고 있는지 잘 모르겠습니다.

~~~~~~~~~~~~~~~~~ UPDATE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~

문제를 발견했지만 해결 방법을 모릅니다.

그래서 데이터 매퍼 auto_migrate를 사용하고있는 것 같습니다. 메서드가 어떻게 든 자산이로드되는 방식과 관계가 있습니다. 내가 이것에 대해 할 수있는 일이 있나. 여기에 내 app.rb 파일에있는 것입니다 :이 당신이 자동으로 당신이 당신의 모델에서 지정하는 테이블을 작성 얼마나하다는 튜토리얼에서 읽을 수 있기 때문에

require 'rubygems' 
require 'sinatra' 
require 'data_mapper' 


# Include the models 
require './models/User' 



# Connect to mysql 
DataMapper.setup(:default, "mysql://[email protected]/dev_landing") 


#This line is what is messing everything up. 
DataMapper.auto_migrate! 



set :public_folder, 'public' 




get '/' do 
    erb :home 
end 

내가 같이 데이터 맵퍼를 설정합니다. 이 작업을 수행하는 더 좋은 방법은 내 스크림 및 CSS의 로딩을 엉망으로 만들지는 않습니까?

+1

작은 포인터 일 뿐이므로 gzip과 같이 모든 스크립트 태그 속성을 같은 순서로 정의하는 것이 좋습니다 (스크립트 참조의 순서가 다름) 생산에 더 좋습니다. (Albiet, 당신은 스크립트를 결합하고 축소하여 더 많은 비용을 절약 할 수있을 것입니다 :) – Rym

답변

0

DataMapper.auto_migrate!은 기존 테이블이있는 경우 기존 테이블을 삭제 한 다음 다시 만듭니다.

이 함수를 호출하면 모든 데이터가 손실됩니다. (그렇기 때문에 마지막에 느낌표가 표시됩니다. 조심해!) 스키마가 여전히 많이 개발되고있는 경우 DataMapper.auto_migrate!DataMapper.auto_upgrade!으로 바꿀 것을 제안합니다. 이전 데이터를 지우지 않고 대신 데이터를 보관하려고 시도하는 동안 원본 테이블을 수정하려고합니다. 데이터를 손상시키지 않고 스키마를 변경하는 것이 항상 가능한 것은 아니기 때문에 데이터가 여전히 약간 손상 될 수 있으므로 느낌표가 계속 표시됩니다.

또 다른 것은 통화 순서를 변경해야한다는 것입니다. 현재는 다음과 같습니다

  1. 모델
  2. DataMapper.Setup
  3. DataMapper.auto_migrate!

귀하의 경로 정의를있는 정의하지만 대신해야한다 :

  1. DataMapper.Setup
  2. 모델 정의
  3. DataMapper.auto_migrate! DataMapper.auto_upgrade!
  4. DataMapper.finalize
  5. 귀하의 경로를 정의 등 (당신은 하나 잊었)

datamapper로 무엇인가 잘못하면 오류 메시지가 이상하거나 오도 할 수 있습니다. 그건 그렇고, 조회 내에서 데이터베이스에 대한 호출이 있는지 확인하십시오. 이 호출은 내 의견으로는 예외없이 컨트롤러에 속합니다. 이렇게하면 앱이 자연스럽게 MVC 패턴을 따릅니다. (모든 Sinatra가 다른 구조를 거의 시행하지 않으면 ...))

관련 문제