ничего не происходит при запуске rake db: migrate - PullRequest
1 голос
/ 20 ноября 2010

запустил новое приложение rails 3.Я добавил пару миграций, которые были созданы с помощью Scaffold.Когда я запускаю "rake db: migrate", на консоль ничего не выводится, даже когда я запускаю "rake --verbose db: migrate"

, вот пример миграции

class CreateBicycles < ActiveRecord::Migration
  def self.up
    create_table :bicycles do |t|
      t.string :title
      t.text :Note
      t.string :Manufacturer
      t.string :Model
      t.date :year_manufactured
      t.integer :view_count
      t.timestamps
    end
  end

  def self.down
    drop_table :bicycles
  end
end

Ответы [ 2 ]

1 голос
/ 18 мая 2018

У меня есть совершенно странный ответ, который я подтвердил, чтобы быть правдой. Мы строили докер-контейнеры с VERSION=<our application version> и обнаружили, что ни одна из наших миграций не будет выполняться внутри контейнера, но нормально работала вне контейнера.

Короче говоря: убедитесь, что вы не указали ни одной переменной среды с именем VERSION, в противном случае миграция будет использовать ее как target_version, и если она будет отличаться от nil, она не запустит все миграции.

Соответствующий бит кода из lib/activerecord/tasks/database_tasks.rb:

  def migrate
    raise "Empty VERSION provided" if ENV["VERSION"] && ENV["VERSION"].empty?

    verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
    version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
    scope = ENV["SCOPE"]
    verbose_was, Migration.verbose = Migration.verbose, verbose
    Migrator.migrate(migrations_paths, version) do |migration|
      scope.blank? || scope == migration.scope
    end
    ActiveRecord::Base.clear_cache!
  ensure
    Migration.verbose = verbose_was
  end
1 голос
/ 18 декабря 2010

Я столкнулся с проблемой, как и вы. Вот мое описание проблемы.

попробуйте rake db: version, он возвращает 0.

попробуйте rake db: migrate, ничего не произошло и неттаблица создана, даже в db / migrate есть файлы миграции.попробуйте rake db: migrate VERSION = YourAnyMigrationFileTimestamp , возникло исключение, не обвиняет в такой миграции.

если ваша проблема, как у меня, может быть, вы получили или установите неправильную задачу rake, которая изменяет значение по умолчаниюroot при запуске задачи миграции.

, чтобы проверить его, вам нужно отладить третье задание (/1989568/ruby-on-rails-otladka-grablei может рассказать вам, как отладить рейк-задачу).

строка отладки 548 в activerecord-3.0.1 / lib / active_record /igration.rb, запустите Dir.pwd, если результат не является корнем вашего приложения, должна быть какая-то другая задача, измените каталог по умолчанию.

Вот что я сделалотладка

(rdb: 1) p self.class

ActiveRecord :: Migrator

(rdb: 1) n

/ home / raykin /.rvm/gems/ruby-1.9.2-p0@r3local/gems/activerecord- 3.0.1 / lib / active_record /igration.rb: 550

files = Dir ["# {@ migrations_path} / [0-9] _ .rb "]

(rdb: 1) n

/ home / raykin / .rvm / gems / ruby-1.9.2-p0 @r3local / gems / activerecord- 3.0.1 / lib / active_record /igration.rb: 552

migrations = files.inject ([]) do | классы, файл |

(rdb: 1) p файлы

[]

(rdb: 1) p @ migrations_path

"db / migrate /"

(rdb: 1) p Dir ['db / migrate / [0-9] _ .rb ']

[]

(rdb: 1) л

* выходной сигнал очищен *

(rdb: 1) Dir.pwd

* Неизвестная команда: "Dir.pwd".Попробуйте "help".

(rdb: 1) p Dir.pwd

"/ home / raykin / campus /: / code / campus / db / data_export"

видите, текущий каталог был изменен, потому что rails будет загружать все задачи перед запуском миграции (кажется, есть способ пропустить всю загрузку), а некоторые плохие задачи (я только что написал это вчера ...) изменяют текущий каталог.

Это точно не проблема Rails, но это действительно запутанный результат для пользователя.надеюсь, может помочь вам.

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