5

開発用のレールサーバーに対して実行されるiPhoneクライアントテストがあります。 Railsの設定でクラスキャッシングをオンにすると、スイート全体が1桁高速に実行されます。一方、テストを実際に実行していないときは、開発が遅くなります。Rails 3でプログラムでconfig.cache_classesを変更できますか?

クラスのキャッシングをオンにし、最後に別のアクションをオンにしてクラスキャッシングをもう一度オフにするために、テストスイートを最初に操作します。

これも可能ですか?もしそうなら、どうですか?

答えて

0

あなたの提案がうまくいくとは思いません。

しかし、間違った解決策を探している可能性があります。

iphoneテストで開発データベースにアクセスするのが望ましい場合は、 新しい環境を追加しないでください。

追加新しいファイルの設定/環境/ iphone_dev.rb

require File.dirname(__FILE__)+"/development.rb" 
config.cache_classes = true 

そして、あなたのdatabase.ymlの(mongoid.ymlまたは何か)

iphone_dev: 
    host: localhost 
    database: my_app_development 

ない理由は、データベースカントはありませんで

同じ

今だけ実行することがrails server -eiphone_dev -p3001

あなたがすべきあなたのdevサーバーとほとんど同じサーバーがありますが、キャッシングが有効な状態で別のポートで稼働しています( )。

+0

2台のサーバーを並行して稼働させることは悪い考えではありませんが、問題はそれほど解決しません。変更を加えるたびにこの新しいテストサーバーを再起動する必要があります。 – ilya

+0

「再起動が煩わしいほど高速なリクエスト」や「自動的に変更をロードするリクエストが遅い」と判断する必要があるかもしれません。 –

+0

これは現在のケースです。私はちょうど一定の時間の間、「高速モード」をオンにできるようにしたい。 – ilya

1

重大なハッキングはありません。 Railsは、すべてのリクエスト(cache_classes=false)でファイルが再ロードされるようにかなりの手間をかけます。 cache_classes設定変数の値は、いくつかの場所で初期化子で使用されていない、少なくともその存在の:cache_classesはtrue

  • (彼らはもはやリロード可能です意味しない)を設定するときにルビーのファイルをロードするためにrequireを使用して

    • cache_classesあなたはcache_classes変数の値へのアクセスを持っているfalse

    ときディスパッチャコールバックは、リクエストごとにアプリケーションをrealoadするために、あなたが好きならあなたも、それを変更することができます。

    Rails.configuration.cache_classes = true 
    

    しかし、これはその値がレールアプリの起動時に一度だけ実行する使用されている初期化子として実行されているレールのインスタンスには影響しません。

    これが意味することは、深刻な時間とハッキングの努力をする準備ができていない限り、サーバーの再起動を実際には避けることはできません。だから、あなたが調べる必要があるのは、テストスイートを通してこの再起動プロセスを制御することです。

    例えば、rails from within railsを再起動してみてください。これにより、テストスイートが実行を開始する直前に(サーバーを適切なモードで再起動する)アクションと、すべてのテストが完了した後にサーバーがヒットするアクションを定義して、cache_classesを設定してすべてを再開することができます以前のものと同じであった。キャッシュクラスの値は、環境変数like this post suggestsによって制御します。

    これをすべて設定して一緒にハングアップさせるには、少しでも手間がかかりますが、これはおそらく、「自動魔法の」解決策が必要な場合に最適です。