在将数据库从sqlite3更改为postgres之后,我使用Cloud9将我的应用程序部署到heroku。我的应用程序在那之后一直表现不好。例如图片在制作休息两三个小时后上传,就不好了。我还必须每两个小时启动一次PostgreSQL才能使用developmentsudo service postgresql start
这是我的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

仅供参考,在这个应用程序中,注册用户可以上传图片到应用程序,所以我不能保存我只想要的图片。

最佳答案

因为你不确定上传文件的路径,我相信你的问题就在那里。
我并没有太多使用Heroku,但是从他们的article
每个dyno都有自己的临时文件系统,其中包含最近部署的代码的新副本。在dyno的生命周期中,其运行进程可以将文件系统用作临时草稿行,但在任何其他dyno中的进程都看不到写入的文件,并且在dyno停止或重新启动时,写入的任何文件都将被丢弃。例如,这种情况发生在任何时候由于应用程序部署而更换DyNO,并且每天大约一次作为正常DyNo管理的一部分。
因此,如果您的图像被上传到代码文件系统,其他进程将看不到它们,或者在dyno被替换后它将被破坏,因为当heroku替换dyno时,它只考虑上次部署中部署的文件。而且没有上传的图片。
所以我建议您使用像AWS S3这样的CDN。

关于ruby-on-rails - Rails生产中的图像中断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41607862/

10-12 07:21