【问题标题】:MailCatcher does not work with rbenv on VMMailCatcher 不适用于 VM 上的 rbenv
【发布时间】:2014-10-18 15:07:49
【问题描述】:

我在使用 rbenv 管理的 VM (VirtualBox) 中安装了 MailCatcher。 但是,mailcatcher 不起作用,在下面显示错误消息:

`require': cannot load such file -- i18n/core_ext/string/interpolate (LoadError)

好像i18n没有安装,但是我安装了。

[vagrant@localhost ~]$ gem list i18n

*** LOCAL GEMS ***

i18n (0.7.0.beta1)

我在 AWS EC2 中安装的和那个一样,它可以工作。

我的虚拟机发生了什么?

---详情---

操作系统:CentOS 6.5

Ruby:2.1.1 与 rbenv 0.4.0

全部错误信息:

[vagrant@localhost ~]$ mailcatcher--http-ip 192.168.33.12
/home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- i18n/core_ext/string/interpolate (LoadError)
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-3.2.19/lib/active_support/core_ext/string/interpolation.rb:2:in `<top (required)>'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-3.2.19/lib/active_support/core_ext/string.rb:9:in `<top (required)>'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-3.2.19/lib/active_support/core_ext.rb:2:in `block in <top (required)>'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-3.2.19/lib/active_support/core_ext.rb:1:in `each'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activesupport-3.2.19/lib/active_support/core_ext.rb:1:in `<top (required)>'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mailcatcher-0.5.12/lib/mail_catcher.rb:1:in `<top (required)>'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vagrant/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/mailcatcher-0.5.12/bin/mailcatcher:3:in `<top (required)>'
    from /home/vagrant/.rbenv/versions/2.1.1/bin/mailcatcher:23:in `load'
    from /home/vagrant/.rbenv/versions/2.1.1/bin/mailcatcher:23:in `<main>'

【问题讨论】:

  • 您尝试使用的 i18n 测试版可能有问题。使用已发布的版本。此外,错误来自 activesupport,而不是 mailcatcher。
  • @lassy 这就是答案。你应该回答你自己的问题并标记它。

标签: ruby virtual-machine vagrant virtualbox rbenv


【解决方案1】:

结合已发布的答案,这是我想出的解决方案:

我的环境:

  • rbenv
  • 导轨 4.1.8
  • i18n (0.7.0.beta1)

我的问题: 在我现有的 Rails 项目文件夹中运行 gem install mailcatcher 后,我运行 mailcatcher 并得到:

`require': 无法加载此类文件 -- i18n/core_ext/string/interpolate (LoadError)

我不想在我现有项目的文件夹中更新 i18n gem,因为我的项目中的一切工作正常。

听从@joostvanrijn 的建议,我决定专门为MailCatcher 创建一个单独的rails 项目文件夹。我将文件夹命名为mailcatcher。 在我新创建的/mailcatcher 文件夹中,我运行了gem install mailcatcher。然后我跑了gem update i18n,这让我到了i18n-0.7.0。 最后,我打电话给mailcatcher,它运行顺利。

后来,我遇到了 MailCatcher 的另一个问题:

虽然我可以访问 http://127.0.0.1:1080,但发送电子邮件会失败

已完成 500 内部服务器错误

Net::ReadTimeout (Net::ReadTimeout)

我试图通过转到 http://127.0.0.1:1080 并单击“退出”来退出 MailCatcher,但这只会将我带到 http://mailcatcher.me 而不会真正终止进程。

为了终止进程,我使用lsof -i -n -P | grep TCP 查找在127.0.0.1:1025127.0.0.1:1080 上运行的进程并使用kill -9 PID

我从这个Discourse post 了解到Net::ReadTimeout 是由于MailCatcher 中的一个错误,解决方法是使用mailcatcher -f 在前台运行MailCatcher。这解决了我的问题,现在我可以毫无问题地“接收”电子邮件。耶!

【讨论】:

    【解决方案2】:

    rails 4.2 beta / activesupport-4.2.0.beta2 依赖于 i18n (= 0.7.0.beta1)。

    mailcatcher (0.5.12) 如果加载 i18n 的 beta gem 会抛出错误。

    如果您没有使用 rails 4.2 beta,那么您可以卸载 beta 版本

    gem uninstall i18n -v i18n-0.7.0.beta1
    

    这在 gem 的多个问题中被引用

    https://github.com/sj26/mailcatcher/issues/164

    https://github.com/sj26/mailcatcher/issues/155

    【讨论】:

      【解决方案3】:

      对于任何遇到 rbenv 问题的人:我找到了一种解决方法。确保使用没有安装 rails 4.2 beta gem 的 ruby​​ 版本。 (我有一个较旧的项目,我 cd 进入并从那里安装和运行 mailcatcher 没有问题。

      您不必创建一个新文件夹(例如名为“mailcatcher”)创建一个支持版本的 .ruby-version 以便您可以从那里运行 mailcatcher

      【讨论】:

        【解决方案4】:

        我也在使用 rails 4.2 并解决了我为 mailcatcher 安装另一个 ruby​​ 版本的问题。

        我将 RVM 和 ruby​​ 2.1.5 用于 rails,所以,我刚刚安装并使用了 2.1.4 用于 mailcatcher:

        rvm install 2.1.4 --with-readline-dir=/usr/include/readline
        rvm 2.1.4
        gem install mailcatcher
        mailcatcher
        

        使用 rbenv 你可以做到:

        CONFIGURE_OPTS="--with-readline-dir=/usr/include/readline" rbenv install 2.1.4
        rbenv shell 2.1.4
        gem install mailcatcher
        mailcatcher
        

        这不是完美的解决方案,但在 mailcatcher 解决此问题之前是一个很好的解决方法。

        【讨论】:

          猜你喜欢
          • 2015-03-19
          • 2013-10-04
          • 1970-01-01
          • 1970-01-01
          • 2014-09-16
          • 2021-11-16
          • 2015-06-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多