Как я могу использовать RedCarpet без CodeRay для реализации уценки в моих блогах?
Поэтому я терпеливо пытался какое-то время работать с гемом CodeRay, чтобы реализовать уценку в моих блогах. Какое-то время это работало, но потом ломало страницу моего блога с ошибкой 500.
CodeRay.scan был определен как виновник:
class CodeRayify < Redcarpet::Render::HTML
def block_code(code, language)
CodeRay.scan(code, language).div
end
end
но даже после того, как я реорганизовал код, чтобы он выглядел так:
class CodeRayify < Redcarpet::Render::HTML
def block_code(code, language)
CodeRay.scan(code, language || :text).div
end
end
У меня все еще остается та же проблема, даже несмотря на то, что я проверяю, что у меня нет обратных галочек в начале предложения, и что я правильно внедряю уценку в своих блогах.
Я получаю такие ошибки:
2017-11-28T23:22:11.456525+00:00 app[web.1]: I, [2017-11-28T23:22:11.456458 #4] INFO -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178] Completed 500 Internal Server Error in 38ms (ActiveRecord: 8.5ms)
2017-11-28T23:22:11.457321+00:00 app[web.1]: F, [2017-11-28T23:22:11.457251 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178]
2017-11-28T23:22:11.457384+00:00 app[web.1]: F, [2017-11-28T23:22:11.457321 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178] ActionView::Template::Error (Invalid id given: console.log("Hello!");```):
2017-11-28T23:22:11.457592+00:00 app[web.1]: F, [2017-11-28T23:22:11.457534 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178] 4:
2017-11-28T23:22:11.457593+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] 5: <% render partial: 'blogs/admin_actions', locals: {blog: blog} %>
2017-11-28T23:22:11.457595+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] 6:
2017-11-28T23:22:11.457595+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] 7: <p><% markdown blog.body %></p>
2017-11-28T23:22:11.457596+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] 8:
2017-11-28T23:22:11.457597+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] 9: </div><!-- /.blog-post -->
2017-11-28T23:22:11.457648+00:00 app[web.1]: F, [2017-11-28T23:22:11.457586 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178]
2017-11-28T23:22:11.457718+00:00 app[web.1]: F, [2017-11-28T23:22:11.457654 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/helpers/blogs_helper.rb:8:in `block_code'
2017-11-28T23:22:11.457719+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/helpers/blogs_helper.rb:23:in `render'
2017-11-28T23:22:11.457720+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/helpers/blogs_helper.rb:23:in `markdown'
2017-11-28T23:22:11.457721+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/views/blogs/_blog.html.erb:7:in `_app_views_blogs__blog_html_erb__2572357733169721276_60667300'
2017-11-28T23:22:11.457721+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/views/blogs/index.html.erb:5:in `_app_views_blogs_index_html_erb__3522254122931434539_63043240'
Вот как я пишу уценку в своем блоге Javascript:
Below are examples of four primitive data types that lay the foundation for all JavaScript programs. Primitive data types, as their name implies, are the simplest built-in forms of data. For example:
```javascript
console.log('New York City');
console.log(40.7);
console.log(true);
console.log(null);
```
Это правильный способ сделать это, почему я получаю ошибку? Судя по бревнам героки в прошлом, это проблема:
CodeRay.scan(code, language).div
но даже если я изменю это на это:
CodeRay.scan(code, language || :text).div
У меня все та же проблема. Поэтому мне интересно, как я могу просто внедрить RedCarpet в этот код ниже без CodeRay:
module BlogsHelper
def gravatar_helper user
image_tag "https://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(user.email)}", width: 60
end
class CodeRayify < Redcarpet::Render::HTML
def block_code(code, language)
CodeRay.scan(code, language || :text).div
end
end
def markdown(text)
coderayify = CodeRayify.new(filter_html: true, hard_wrap: true)
options = {
fenced_code_blocks: true,
no_intra_emphasis: true,
autolink: true,
lax_html_blocks: true,
}
markdown_to_html = Redcarpet::Markdown.new(coderayify, options)
markdown_to_html.render(text).html_safe
end
def blog_status_color blog
'color: red;' if blog.draft?
end
end
1 ответ
Возможно, проблема не в Coderay или RedCarpet. Это может быть просто проблема с данными. Эта ошибка ActionView::Template::Error (Symbol or String expected, but NilClass given.)
означает, что он ожидает контент, но не получает его вообще, поэтому это может быть проблема с проверкой данных или что-то в этом роде.
Поэтому вам может потребоваться устранить проблему с проверкой данных или использовать альтернативу, например CKEditor.