在将数据库从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/