0

コードをHerokuにプッシュし、アプリケーションを壊すステージを変更する際に問題が発生しました。ローカルで動作しますが、Herokuにプッシュすると、アプリが本番ステージに切り替わり、中断することに気付きます。

1つのステージのみを使用する方法、つまり、ローカルで本番ステージで開発する方法はありますか?バージョン履歴は必要ありません。または、開発段階をHerokuにプッシュするだけでよいでしょうか。

ローカルでは、OSX 10.8.1、Ruby 1.9.3p194、およびRails3.2.8を実行しています。

このアプリは、私が学んできたことを基にした最小限のブログであり、物事をつなぎ合わせています。ストレージにSQLiteを利用します。

4

3 に答える 3

3

1つの環境だけを使用することはお勧めできません。しないでください。

ローカル/開発環境と本番環境では違いがある場合があります。そのため、2つの異なる環境を使用するため、構成ファイルでそれらをキャプチャできます。多くのキャッシング、アセットのコンパイル、およびデバッグはdevまたはprodでのみ発生し、それらの動作を変える必要があります。

代わりに、prodとdev(herokuとlocal)の違いをデバッグし、それらの違いを考慮してアプリを変更する必要があります。

たとえば、Herokuはsqliteをサポートしていません-デフォルトでpostgresを使用します。

したがって、開発用にGemfileにsqliteを、本番用にpg gemを含める必要があります。または、開発でもpostgresを使用するように移行することを強くお勧めします(https://devcenter.heroku.com/articles/how-do- i-use-sqlite3-for-development)。

開発でsqliteを続行することを選択した場合、Gemfileは次のようになります。

group :development do
  gem 'sqlite3'
end

group :production do
  gem 'pg'
end
于 2012-09-20T20:15:42.063 に答える
0

ローカルマシンで本番モードを試してみたい場合は、次のようにサーバーを起動します。

rails server -e production

うまくいけば、Herokuにプッシュする前にいくつかの落とし穴を捕まえることができます。

アンドリューの答えが鍵です。開発モードでは、便宜上、キャッシュなどが少なくなります。本番モードはより効率的に実行されますが、開発するのは大きな苦痛になります。(たとえば、常にキャッシュをリロードしてアセットを再コンパイルする必要があります。)アプリの実行が非常に遅いため、本番環境で開発モードを実行する必要はありません。

うまくいけば、これにより、ある環境を別の環境で実行することの間のトレードオフのアイデアが得られます。トレードオフの要因は、主に開発の利便性とパフォーマンスの問題です。

于 2012-09-20T20:26:38.577 に答える
0

Herokuにプッシュされたときにアプリケーションが壊れている理由がわからないので、これはいくつかの問題の1つだと思います。

  • まず、データベースにPostgresを使用している必要があります。つまりgem 'pg'Gemfile少なくとも:productionグループではPostgresを使用している必要があります。

  • 次に、アセットをプリコンパイルするか、アプリケーションを初期化せずにアセットをコンパイルできるように構成設定を変更する必要があります。

    rake assets:precompile

    また

    ファイルに追加config.assets.initialize_on_precompile = falseしますconfig/environments/production.rb

私は通常、を使用してrake assets:precompileからアセットをgitリポジトリに追加しますが、多くの人が、これらのファイルをリポジトリに追加することは通常、最善のアイデアではないと主張します(同意します)。

于 2012-09-20T20:44:26.940 に答える