Нашел это полезным - гарантирует, что скомпилированная сборка ссылается на все, на что вы ссылаетесь в данный момент, поскольку есть хороший шанс, что вы хотите, чтобы 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);
Версия 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]
(или аналогичной версии ) до запуска рельсов.
Для будущих 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
Я получил эту ошибку вчера и создал обходной путь, который должен заставить его работать с 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