6

sqliteを使用してRails3アプリを構築しましたが、MySQLに切り替えようとしています。

新しいMySQLdbを作成し、それに応じてdatabase.ymlを変更し、Rails3でより適切に動作するはずの古いバージョンのmysql2gemをgemfile()に追加しましgem 'mysql2', '< 0.3'た。

開発サーバーを正常に起動できます。ページにアクセスすると、Mysql2::ErrorTable 'twitter_quiz_development.users' doesn't exist)が表示されます。これは問題ありません。スキーマを新しいデータベースに追加する必要があります。これは私が問題にぶつかるところです:

rake db:schema:loadこの厄介なエラーを返します。

ここで見つかった解決策は私にはうまくいきませんでした。gem pristine --allこれを返します

それが助けになるなら、私はUbuntu11を実行しています。

エラーはJSONに関係しているようですが、これを解決する方法がわかりません。ありがとう。

4

2 に答える 2

1

発生している問題は、次の 3 つのことが原因である可能性があります。

  • 使用している Ruby のバージョン
  • Ruby 1.9 での SystemTimer gem の使用
  • JSON ジェム

以下に詳しくまとめました...

最初にお勧めするのは、Ruby 1.9 のバージョンをアップグレードすることです。最新の安定版は次のとおりです。

ruby 1.9.2p180 (2011-02-18 revision 30909)

Ruby Version Manager (RVM)を使用して Ruby をインストールおよび管理することを強くお勧めします。

JSON gem の使用に関しては、http: //ruby.about.com/od/tasks/a/The-Json-Gem.htmをご覧ください。

引用するには:

Ruby 1.8.7 では、gem をインストールする必要があります。ただし、Ruby 1.9.2 では、json gem がコア Ruby ディストリビューションにバンドルされています。したがって、1.9.2 を使用している場合は、おそらくすべて設定されています。1.8.7 を使用している場合は、gem をインストールする必要があります。

JSON gem をインストールする前に、まず、この gem が 2 つのバリアントで配布されていることに注意してください。この gem を gem install json でインストールするだけで、C 拡張バリアントがインストールされます。これには C コンパイラをインストールする必要があり、すべてのシステムで利用可能または適切であるとは限りません。ただし、このバージョンをインストールできる場合は、インストールする必要があります。

C 拡張バージョンをインストールできない場合は、代わりに json_pure を gem install する必要があります。これは、純粋な Ruby で実装された同じ gem です。Ruby コードが実行されるすべての場所、すべてのプラットフォーム、さまざまなインタープリターで実行する必要があります。ただし、C 拡張バージョンよりもかなり低速です。

編集

Ruby 1.9 でSystemTimer gem を使用しないようにする必要があるようです。詳細については、これを参照してください: http://isitruby19.com/systemtimer

フィリップがそのページで行ったコメントを引用するには:

私はこの宝石の (共同) 著者です。短編小説 : Ruby 1.9 でこの gem を使用しても意味がありません。

System Timer は、Ruby 1.8 (MRI) で使用されている「グリーン スレッド」モデルの制限を回避しようとしています。詳細については、 http://ph7spot.com/musings/system-timerを参照してください。

グリーン スレッド モデルを放棄し、ネイティブ スレッドを採用した Ruby 1.9とは無関係です (グローバル インタープリター ロックがまだ存在するため)。

乾杯 - フィリップ

于 2011-06-05T12:27:26.090 に答える
1

gemに到達する前にgem pristine --all、gem でエラーが発生したようです。その宝石は、問題の Rails アプリで使用されていますか?SystemTimerjson

RVMを使用していますか?もしそうなら、私は手動でSystemTimerand jsongems とそのバイナリ (存在する場合) を~/.rvm/gems/ruby-whatever-version/( gemandbinサブディレクトリ内の) から削除します。

JSONこれを Gemfile に追加して、gem の最新バージョン (1.5.1) に更新してみてください。

gem "json", "1.5.1"

そして実行して、 gemの新しいバージョンbundle installをインストールします。SystemTimerjson

于 2011-06-05T09:14:07.043 に答える