Rails:处理不同版本的宝石

时间:2018-10-18 20:52:47

标签: ruby-on-rails rubygems rvm

我有一个安装了0的Rails 5.2应用程序:

int

我想增加对数据库进行自动备份的功能,因此安装了rvm gem。我知道不应将其添加到=> ruby-2.4.2 [ x86_64 ] * ruby-2.4.4 [ x86_64 ] # => - current # =* - current && default # * - default 中,因为它的某些依赖项相对较旧,因此我使用了命令backup

当我运行GemFile时,有许多gem具有两个版本号,例如gem install backup-v5.0.0.beta2

当我尝试通过gem list手动触发备份例程时出现问题:

open4 (1.3.4, 1.3.0)

错误消息中的转向之后,backup perform -t db_backup --config-file /Users/<path_to_my_rails_project>/config/Backup/config.rb产生错误:

[error] CLI::Error
[error] --- Wrapped Exception ---
[error] Gem::LoadError: You have already activated open4 1.3.0, but your Gemfile requires open4 1.3.4. Prepending `bundle exec` to your command may solve this.

请您告知我应该如何安装bundle exec backup perform -t db_backup --config-file /Users/<path_to_my_rails_project>/config/Backup/config.rb gem和运行任务,而不会由于安装了同一gem的版本不同而出现错误

1 个答案:

答案 0 :(得分:0)

确保您尚未通过版本锁定宝石,例如:gem open4, '~> 1.3.4'

尝试bundle update open4 backup。我也会尝试使用最新版的gem。

另一种选择是抛弃这个gem并尝试https://github.com/javan/whenever并运行一个简单的pg_dump,或者不使用任何gem并添加一个cron作业,该作业将创建一个pg_dump并在文件名中带有时间戳。 / p>

这些问题很难调试,但是我的方法通常是开始删除gems,然后让bundler自己找出其依赖关系树。您在Gemfile中定义的次数越多,捆绑程序发生版本不匹配的机会就越大,从而引发类似于您所看到的错误。