0

我似乎遇到了一个障碍,在这里和其他论坛上搜索过,但什么也没有。我正在运行 rails 3.2.3 和 ruby​​ 1.9.3 并想在 heroku 上部署我的应用程序。

我已经创建了雪松,虽然我可以git push heroku master得到一个完整的 500 服务器错误。我怀疑是因为我的数据库不在那里。但是,我似乎无法到达那里。我跑过:

heroku run rake db:create-> 这给出了一些关于弃用的警告,然后dkhgclqccm already exists

所以它已经存在了?所以让我们迁移它:

heroku run rake db:migrate 然而,这输出:

<deprecation errors>
rake aborted!
An error has occurred, this and all later migrations canceled:

PG::Error: ERROR:  relation "hphotos" does not exist
: ALTER TABLE "hphotos" ADD COLUMN "description" character varying(255)

Tasks: TOP => db:migrate
(See full trace by running task with --trace)

该特定迁移是:

class AddDescriptionToHphotos < ActiveRecord::Migration
  def change
    add_column :hphotos, :description, :string
  end
end

对我来说似乎很好,不知道为什么它给我这个错误:/

最后一件事,即使这个迁移成功了,我的数据库也会是空的,我的seeds.rb 没有数据库的所有必要数据。所以我想推孔DB。

heroku db:push         
 !    Taps Load Error: cannot load such file -- sqlite3
 !    You may need to install or update the taps gem to use db commands.
 !    On most systems this will be:
 !
 !    sudo gem install taps

为什么会出现这个?我安装了 'heroku' gem 和 'taps' gem,我在我的 gem 文件中得到了这个:

group :development, :test do
  gem 'mysql2'
end
group :production do
  gem 'pg'
end

此外,当我运行时heroku run rake db:version,它显示: 当前版本:20120508130957 这实际上是我当前版本的 5 次迁移,但我无法迁移它,如我上面提到的错误所示......

提前致谢

4

3 回答 3

1

Heroku 带有一个数据库设置(这就是为什么db:create不起作用)。你试过heroku run rake db:schema:load吗?这应该将您的 schema.rb 文件加载到数据库中。db:migrate这比每次设置新数据库时都要好得多

编辑:

对于您关于水龙头的最后一个问题,它似乎正在尝试在本地使用 sqlite,但您的 Gemfile 中只有 pg。您可能在 config/database.ymladapter: sqlite中。因此,要么您需要在本地使用 postgres 并将该适配器更改为 postgres,要么走更简单的路线并在本地使用 sqlite 并将其添加到 :development 组。

请注意,heroku 仅使用 postgres,因此我不建议从 mysql 开发,因为在某些语法以及您如何在两个平台之间做一些事情时存在一些不一致之处。再说一次,如果您只使用与 ANSI 兼容的查询或仅使用 rails 的方法来激活查询,那么无论哪种方式都应该没问题。

于 2012-05-15T18:50:24.513 回答
0

我认为你需要仔细检查你的迁移,看看你是否真的有一个文件说:

  def up
    create_table :hphotos do |t|
      [...]
    end

似乎该表尚未远程创建,您正在尝试对其进行修改。

于 2012-05-15T20:23:52.603 回答
0

解决方案是不仅将 Taps gem 添加sqlite3到 Gemfile 中,还将 gem 添加到:development组中。如果您sqlite3在开发中使用,那么添加tapsgem 就足够了。

但是由于您正在使用mysql2您的开发,因此要解决该问题,您必须同时添加两者。

group :development do
  gem 'taps'
  gem 'sqlite3'
end
于 2015-09-29T08:31:34.493 回答