2

私は以前にシナトラで何もしたことがなかったので、プロジェクトで試してみることにしました。スクリプトの読み込みがどのように機能するかについて混乱しています。断続的に稼働しているようです。2 つのスクリプト/css ファイルに内部サーバー エラーが発生する場合もあれば、すべてにエラーが発生する場合もあります。

これは私の layout.erb です:

<!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>

public フォルダー /public/assets 内に assets フォルダーがあります。assets/js/script.js ファイルをロードし、handlebars ファイルをロードしないことがあるため、これは奇妙です。それ以外の場合は、script.js ファイルではなくハンドルバーをロードします。何が起こっているのかわかりません。

~~~~~~~~~~~~~~~~更新~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 〜

問題を発見しましたが、それを修正する方法がわかりません。

それで、データマッパーを使用しているため、auto_migrate! メソッドは、アセットのロード方法を何らかの形で台無しにしています。これについて何かできることはありますか?app.rb ファイルにあるものは次のとおりです。

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


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



# Connect to mysql
DataMapper.setup(:default, "mysql://root@localhost/dev_landing")


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



set :public_folder, 'public'




get '/' do 
    erb :home
end

モデルで指定したテーブルを自動的に作成する方法をチュートリアルで読んだので、このようにデータ マッパーをセットアップしました。私のスクリプトとCSSの読み込みを台無しにしないように、これを行うためのより良い方法はありますか?

4

1 に答える 1

0

DataMapper.auto_migrate!既存のテーブルが存在する場合は削除し、再度作成します。

したがって、この関数を呼び出すと、すべてのデータが失われます。(そのため、最後に感嘆符があります。つまり、注意してください!)スキーマがまだ開発中の場合は、に置き換えることをお勧めしDataMapper.auto_migrate!ますDataMapper.auto_upgrade!。古いデータを消去するのではなく、データを保持しようとしている間、基になるテーブルを変更しようとします。データを破損せずにスキーマを変更できるとは限らないため、データがわずかに損傷する可能性があるため、感嘆符は引き続き表示されます。

もう1つ、呼び出しの順序を変更する必要があります。現在は次のとおりです。

  1. モデル定義
  2. DataMapper.Setup
  3. DataMapper.auto_migrate!
  4. ルート定義など。

しかし、代わりに次のようにする必要があります。

  1. DataMapper.Setup
  2. モデル定義
  3. DataMapper.auto_migrate! DataMapper.auto_upgrade!
  4. DataMapper.finalize(あなたはそれを忘れました)
  5. ルート定義など。

datamapperで何かが台無しになっていると、エラーメッセージが奇妙で誤解を招く可能性があります。ちなみに、ビュー内からデータベースへの呼び出しがないことを確認してください。私の意見では例外なく、これらの呼び出しはコントローラーに属します。このようにして、アプリは自然にMVCパターンに従います。(結局のところ、Sinatraは他の構造をほとんど強制しません...;))

于 2012-10-20T09:46:03.210 に答える