我正在使用Rails 5.2.3,尝试在Heroku管道上查看生产应用程序时出现应用程序错误,并且在以下情况下出现以下错误:
我运行heroku logs
,我得到:heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/"
我运行heroku run rails console
,我得到:Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? sqlite3 is not part of the bundle. Add it to your Gemfile. (LoadError)
我运行heroku run rails db:migrate
,我得到:LoadError: Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? sqlite3 is not part of the bundle. Add it to your Gemfile.
我要使用sqlite3进行开发,而要使用postgres进行生产,那么为什么需要使sqlite3 gemfile在生产模式下可用?
这是我的gemfile:
group :development do
gem 'sqlite3'
end
group :production do
gem 'pg'
end
这是我的数据库。yml:
default: &default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
database: db/development.sqlite3
test:
<<: *default
database: db/test.sqlite3
production:
<<: *default
database: db/production.sqlite3
答案 0 :(得分:2)
您的问题是这部分:
production:
<<: *default
database: db/production.sqlite3
当前,您的产品仍在尝试使用sqlite,因为它会扩展为
production:
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
database: db/production.sqlite3
显然db/production.sqlite3
也建议使用sqlite
数据库
改为将此部分更改为
production:
adapter: postgresql
host: [your db host]
database: [your database]
username: [your username]
password: [your password]
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
PostgreSQL所说的一切都是免费的,如果要部署到PostgreSQL,您真的不应该再次开发sqlite。
SQLite非常适合用于概念验证,因为它可以快速扩展且易于拆卸,并且没有实际的外部依赖关系,但是如果您要实际构建应用程序并将其部署到某个地方,则应该使用生产就绪型数据库
答案 1 :(得分:0)
您在production
中的database.yml
设置继承了development
设置-您想将其更改为
production:
adapter: postgresql
url: <%= ENV['DATABASE_URL'] %>
如果您使用的是Heroku,则url: <%= ENV['DATABASE_URL'] %>
适用。如果没有,则可以考虑凭证规范格式here。
答案 2 :(得分:0)
像这样尝试 database.yml ,
default: &default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
database: db/development.sqlite3
test:
<<: *default
database: db/test.sqlite3
production:
adapter: postgresql
pool: 5
timeout: 5000
database: db/production.sqlite3
答案 3 :(得分:0)
我知道你写了
我想使用sqlite3进行开发,并使用postgres进行生产
我可以理解,因为我自己去过那里;感觉到postgres似乎是安装的一大步,并且“我只想要一些可以使用的小东西”。
也许您的原因有所不同,但是如果不是,安装postgres可以为您省去很多麻烦。 Postgres是免费的,默认安装设置可能会非常适合您。
除了为您节省适配器和gem不兼容的麻烦之外,有时您在可用的SQL命令(当您想做更高级的事情)以及什么东西具有高性能方面也有差异。
https://www.postgresql.org/download/
当开发和生产环境不同时,您将花费大量时间来修复不会增加所构建产品价值的事物。
答案 4 :(得分:0)
我通过将config / database.yml更改为:
来解决此问题。server.ssl.key-store=/etc/environment/${SERVER_KEYSTORE}
server.ssl.key-store-password=/etc/environment/${SERVER_KEYSTORE_PASSWORD}
正在运行:public partial class MainForm : Form
{
public static string serverName;
public static string database;
public MainForm()
{
InitializeComponent();
}
MySqlConnection connection = new MySqlConnection("server=" + serverName + "; Database=" + database + "; username=username; password=password");
public void btnTest_Click(object sender, EventArgs e)
{
serverName = txtServer.Text;
database = txtDatabase.Text;
try
{
connection.Open();
MessageBox.Show("Connected!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
,因为尚未为我的应用程序配置PostgreSQL。