Приложение Simple Rails: ошибка не может посетить целое число

Нашел это полезным - гарантирует, что скомпилированная сборка ссылается на все, на что вы ссылаетесь в данный момент, поскольку есть хороший шанс, что вы хотите, чтобы C #, который вы компилируете, использовал некоторые классы и т. д. в коде, который испускает это:

        var refs = AppDomain.CurrentDomain.GetAssemblies();
        var refFiles = refs.Where(a => !a.IsDynamic).Select(a => a.Location).ToArray();
        var cSharp = (new Microsoft.CSharp.CSharpCodeProvider()).CreateCompiler();
        var compileParams = new System.CodeDom.Compiler.CompilerParameters(refFiles);
        compileParams.GenerateInMemory = true;
        compileParams.GenerateExecutable = false;

        var compilerResult = cSharp.CompileAssemblyFromSource(compileParams, code);
        var asm = compilerResult.CompiledAssembly;

В моем случае я выбрал класс, имя которого было сохранено в строке, className, которая имела один открытый статический метод с именем Get(), который возвращался с типом StoryDataIds. Вот как выглядит этот метод:

        var tempType = asm.GetType(className);
        var ids = (StoryDataIds)tempType.GetMethod("Get").Invoke(null, null);
23
задан luis reis 19 May 2017 в 13:54
поделиться

3 ответа

Версия Ruby, которую вы используете (2.4.1), не совместима с версией Rails, которую вы используете (3.2.22.5). Эта версия Ruby требует как минимум Rails 5. Попробуйте понизить версию до Ruby 2.3 или ниже. Вы можете использовать менеджер версий Ruby (то есть rvm, rbenv или chruby), чтобы контролировать, какой Ruby используется при запуске вашего приложения.

Редактировать

Только что заметил, что вы уже используете rbenv из вашей трассировки стека. Добавьте файл .ruby-version в каталог вашего приложения, содержащий следующую строку:

2.3.4

После повторного входа в этот каталог подтвердите версию с помощью:

[111]gt; ruby -v
ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-darwin16]

(или аналогичной версии ) до запуска рельсов.

27
ответ дан Aaron Breckenridge 19 May 2017 в 13:54
поделиться

Для будущих Googlers. У меня была та же проблема, но мне нужно было применить вариант решения Томаса Дзедзича.

У меня есть ruby 2.5.1 и rails 4.2.10, работающие в моей системе.

Как показано в , этот коммит ToSql был изменен с Arel::Visitors::Visitor на Arel::Visitors::Reduce

Так что это мое обновленное решение. В инициализаторе рельсов поместите это:

module Arel
  module Visitors
    class DepthFirst < Arel::Visitors::Visitor
      alias :visit_Integer :terminal
    end

    class Dot < Arel::Visitors::Visitor
      alias :visit_Integer :visit_String
    end

    class ToSql < Arel::Visitors::Reduce
      alias :visit_Integer :literal
    end
  end
end
6
ответ дан jonnyjava.net 19 May 2017 в 13:54
поделиться

Я получил эту ошибку вчера и создал обходной путь, который должен заставить его работать с ruby ​​2.4 и rails 3.2.

Коммит, из которого я получил идею, находится по адресу: https://github.com/rails/arel/commit/dc85a6e9c74942945ad696f5da4d82490a85b865

Просто включите следующее в инициализаторы rails.

module Arel
  module Visitors
    class DepthFirst < Arel::Visitors::Visitor
      alias :visit_Integer :terminal
    end

    class Dot < Arel::Visitors::Visitor
      alias :visit_Integer :visit_String
    end

    class ToSql < Arel::Visitors::Visitor
      alias :visit_Integer :literal
    end
  end
end
24
ответ дан Thomas Dziedzic 19 May 2017 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: