2017-01-12 8 views
0

データベースをsqlite3からpostgresに変更した後、私はCloud9を使ってherokuに自分のアプリケーションをデプロイしました。私のアプリはその後もうまく動作していません。プロダクションの画像がアップロードから2〜3時間後に壊れてしまうなど、悪いことです。私はまた、開発を使用できるようにするために、数時間おきにPostgreSQLを起動する必要がありますsudo service postgresql start画像がRailsで生産中断

これは私のdatabase.ymlです:

default: &default 
    adapter: postgresql 
    encoding: unicode 
    pool: 5 
    username: <%= ENV['USERNAME'] %> 
    password: <%= ENV['PASSWORD'] %> 
    host:  <%= ENV['IP'] %> 

development: 
    <<: *default 
    database: sample_app_development 

test: 
    <<: *default 
    database: sample_app_test 

production: 
    <<: *default 
    database: sample_app_production 

私もそう、ここで、それはproduction.rbに関係しているということを聞いた私のものです:

Rails.application.configure do 

    config.cache_classes = true 

    config.eager_load = true 

    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 


    config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? 


    config.assets.js_compressor = :uglifier 

    config.assets.compile = true 


    config.assets.digest = true 


    config.log_level = :debug 


    config.i18n.fallbacks = true 

    config.active_support.deprecation = :notify 

    config.log_formatter = ::Logger::Formatter.new 

    config.active_record.dump_schema_after_migration = false 
end 

はFYI、このアプリにサインアップするユーザーができますアプリケーションに画像をアップロードするために、私は欲しいだけの画像を保存できません。

+0

あなたの資産をどこで保存していますか?それはどこかの間で永続的な展開ですか? Herokuは、アイドル状態になるとインスタンスをゴミ箱に入れ、蓄積したすべての一時的なデータを取り込みます。 – tadman

+0

この 'config.serve_static_assets = true'をapplication.rbとrails_12factor gemに追加しましたか? –

+0

@tadman私はそれがどこに保存されているかわからない!私はpublic/system/posts/imagesで推測していますか? – hekmat

答えて

2

アップロードしたファイルのパスが不明なので、問題があると思います。 私はずっとHerokuのを使用しますが、していない彼らのarticleから:

各ダイノは、最後に展開されたコードの新しいコピーして、独自のはかないファイルシステムを取得します。 dynoの生存期間中、実行中のプロセスはファイルシステムを一時的なスクラッチパッドとして使用できますが、書き込まれたファイルは他のdynoのプロセスには表示されず、書き込まれたファイルはdynoを停止または再起動した時点で破棄されます。たとえば、これは、アプリケーションの展開のためにdynoが交換され、通常のdyno管理の一部として1日に約1回交換されるたびに発生します。

ので、あなたのイメージは、コードのシステムファイルにアップロードされている場合、彼らは他のプロセスに表示されていないか、ダイノを交換した後、Herokuのはダイナモを交換する際に、それが最後に展開されたファイルのみを考慮するためには、ゴミ箱に移動されます配備アップロードされた画像はありません。

AWS S3のようなCDNを使用することをお勧めします。

+0

私は問題を見つけたと思っています。それは一度sudoサービスpostgresqlを実行すると、すべての画像が消えてしまいます。 'sudo service postgresql start! ' – hekmat

+0

@hekmatあなたのdynoを破棄している場合、そのサービスが何であるかは関係ありません。その場合、Herokuがサポートしている永続データベースを使用する必要があります。 – tadman

+0

明らかにそれも問題ではありません。画像はpostgresqlがオンになっていても再び壊れました!しかし、私は、パブリック/システム/ポスト/画像の開発中に保存されている画像の1つが壊れることはないことを発見しましたが、プロダクションで追加されたすべてのものが壊れてしまいました! – hekmat

0

あなたの問題には2つの問題があります。最初は、HerokuにPGSqlを直接インストールしようとしています。

Digital oceanやAWSの共有サーバーとは異なり、HerokuはPaaS(Platform as a Service)であり、あなたのレールアプリとは別にherokuサーバーには何も置くことができません。あなたはadd-onsを通してそれらを使用しなければなりません。

PGSqlを追加すると、自動的に定期的にバックアップが取られ、DB操作を行うためにはるかに最適化されます。

がここでそれについては、こちらをご覧ください: https://elements.heroku.com/addons/heroku-postgresql

をまた、Herokuのは、それが彼らにあなたが毎回デプロイあなたの資産をコンパイルする必要がありますので、ご使用のサーバーを再起動するたびに再利用として、サーバー上の静的な資産を格納奨励していません。これをより良くするには、CDNまたはS3にアップロードしてください。

関連する問題