有没有办法在Heroku上部署使用sqlite的rails应用程序?

时间:2017-01-05 19:00:23

标签: ruby-on-rails ruby heroku

我使用默认的Sqlite数据库开发了一个Ruby on Rails应用程序。当我在Heroku上部署它时,一些页面没有加载。

4 个答案:

答案 0 :(得分:3)

其他海报是正确的,因为你不能在Heroku上使用SQLite,但我想花一分钟来说明为什么这是真的。

Heroku在平台上实施最佳实践。这意味着他们对部署采取了一种非常自以为是的立场,并强迫您以可扩展部署的方式编写代码。

他们这样做的方法之一就是将您的网络服务器视为短暂的:他们在正在运行的dyno上写入磁盘的任何数据都可以随时销毁。

此设计决策迫使您(应用程序的开发人员)将应用程序所需的文件存储在更安全,更快速,专用的文件存储服务(如Amazon S3)中。这种做法带来了很多可扩展性的好处:

  • 如果您的网络服务器不需要写入磁盘,则可以多次部署它们而无需担心存储限制。
  • 不需要在Web服务器之间共享磁盘。共享磁盘通常会导致IO争用,并可能对性能产生负面影响。
  • 由于不需要磁盘资源,因此可以轻松地在商用服务器上横向扩展Web应用程序。

因此,你不能在Heroku上使用SQLite的原因是因为SQLite将所有数据库信息存储在磁盘上的文件中,并且因为Heroku将删除磁盘上的文件,所以这不会起作用。

这就是为什么建议使用真正的'像Postgres或MySQL这样的数据库服务器,因为它们是单独托管的,并且有自己的存储/等等。

如果确实想在Heroku上使用SQLite,您可以随时在单独的服务器(Heroku外部)上托管SQLite数据库,然后通过Internet连接到该数据库。但这并不是真正推荐的,特别是因为SQLite并不是真的为这种使用模式而设计。

答案 1 :(得分:0)

您不能将SQLite与Heroku一起使用。他们需要使用Postgres。 Here is a good tutorial that walks you through the switch from SQLite to Postgres

答案 2 :(得分:0)

你不能在Heroku中使用sqlite。简单的解决方案是指定宝石。

<强>的Gemfile:

group :development, :test do
  gem 'sqlite3'
end

group :production do 
  gem 'pg' #PostgreSQL
  gem 'rails_12factor'
end

答案 3 :(得分:0)

为生产安装'pg'宝石

 group :production do
   gem 'pg'
 end

如果您愿意,还可以在开发中使用sqlite

 group :development do
   gem 'sqlite3'
 end

Heroku已在服务器上预装了postgres。你可以使用sqlite但你必须自己安装它。这更容易。