Heroku Deploy: URI :: InvalidURIError: неверный URI (не является URI?):: // user:pass@127.0.0.1/dbname - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть проект с Vue интерфейсом и рельсом. Это просто очень простой API на сервере, без базы данных или чего-либо еще. Он работает нормально локально, но теперь я хочу развернуть его на Heroku.

Однако, когда я запускаю его, я получаю следующую ошибку.

-----> Detecting rake tasks
 !
 !     Could not detect rake tasks
 !     ensure you can run `$ bundle exec rake -P` against your app
 !     and using the production group of your Gemfile.
 !     rake aborted!
 !     URI::InvalidURIError: bad URI(is not URI?): ://user:pass@127.0.0.1/dbname
  ...
  ...
/activerecord-6.0.2.1/lib/active_record/railties/databases.rake

На основе различных сообщений SO / документации Heroku, Я уже пробовал:

  • bundle exec rake -P RAILS_ENV=production - все выглядит нормально
  • добавление зависимости rake в Gemfile
  • удаление зависимости sqlite в Gemfile
  • удаление BUNDLED WITH из Gemfile.lock

Но все та же ошибка.

Я думаю, это связано с моей конфигурацией базы данных, но у меня нет базы данных в моем проекте, так что это все равно кажется ненужной задачей. Я пытался закомментировать Rails из моего Gemfile, но он все еще там как зависимость для других драгоценных камней. Когда я выполняю развертывание после внесения этого изменения, оно все равно выполняет ту же задачу и завершается неудачей.

Ссылка на ветка репо

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Необходимо полностью исключить использование ActiveRecord из проекта. Как прокомментировал Макс , в новом приложении это можно сделать, выполнив rails new app_name --skip-active-record --api, чтобы сделать это для существующего проекта, см. это объяснение

0 голосов
/ 02 февраля 2020

Вместо require 'rails/all', для которого требуются все Railties, включая ActiveRecord, вам нужно явно указать, какие Railties вы хотите использовать:

require File.expand_path('../boot', __FILE__)

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
# require "active_record/railtie"
# require "active_storage/engine"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_mailbox/engine"
# require "action_text/engine"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"

module Draw
  class Application < Rails::Application
    # You don't need this nonsense since you don't even have config/application.yml
    #  ENV.update YAML.load_file('config/application.yml')[Rails.env] rescue {}
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
    # config.time_zone = 'Central Time (US & Canada)'

    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
    # config.i18n.default_locale = :de

    # Do not swallow errors in after_commit/after_rollback callbacks.
    # config.active_record.raise_in_transactional_callbacks = true
  end
end

Если вы не хотите использовать ActiveRecord, вы можете просто получить избавиться от /db и /config/database.yml.

Вам также не нужно добавлять в свой Gemfile gem 'rake', так как рельсы в любом случае зависят от него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...