【问题标题】:Ruby on Rails - Heroku deployment issuesRuby on Rails - Heroku 部署问题
【发布时间】:2012-05-23 07:27:38
【问题描述】:

我似乎遇到了困难,在这里和其他论坛上进行了搜索,但一无所获。我正在运行 rails 3.2.3 和 ruby​​ 1.9.3,并希望在 heroku 上部署我的应用程序。

我已经创建了 cedar,虽然我可以 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 次迁移,但我无法迁移它,正如我上面提到的错误所示......

提前致谢

【问题讨论】:

  • 显然在创建表的迁移之前调用了此迁移。不知道那是怎么回事。解决方案是手动删除迁移,然后创建一个新的 stack cedar 应用程序。然后迁移,播种,一切都很好。
  • 这正是我向您指出的内容“似乎尚未远程创建表,您正在尝试修改它。”不胜感激。

标签: ruby-on-rails database deployment heroku


【解决方案1】:

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

编辑:

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

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

【讨论】:

  • 我没有使用 sqlite gem。我设法仅通过迁移然后播种来重新创建数据库。我的答案是关于问题的cmets。虽然感谢您的输入
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    group :development do
      gem 'taps'
      gem 'sqlite3'
    end
    

    【讨论】:

      猜你喜欢
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2013-05-25
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多