我创建了一个网站并将其放在Heroku上.然后我在Heroku控制面板中添加了一个自定义域(例如"site.example.com"),并将DNS指向我的Heroku地址.这很好,但是当我访问该网站时,我收到一个大浏览器警告,说该证书是针对herokuapp.com的,而不是针对"site.example.com".如何关闭HTTPS或以其他方式修复它?(我不需要自己的SSL证书.)
注意:如果您的应用程序强迫用户使用SSL,那么Heroku就不会出错.检查production.rb以确保它没有说:
config.force_ssl = true
Run Code Online (Sandbox Code Playgroud)
如果是,请将其更改为false:
config.force_ssl = false
Run Code Online (Sandbox Code Playgroud) 在我从Rails 3.2升级到Rails 4.1之后的某些时候,我开始收到以下错误:
ActionController :: InvalidCrossOriginRequest:安全警告:另一个站点上的嵌入式标记请求受保护的JavaScript.如果您知道自己在做什么,请继续并禁用此操作的伪造保护以允许跨源JavaScript
它们主要来自Windows XP上的Internet Explorer 6或8浏览器,并且永远不会附带用户信息,即使它们正在访问仅向登录用户显示的控制器操作.
如何解决此问题或解决此问题?
(另请参阅升级之前的相关问题:为什么Rails无法从Internet Explorer的Ajax请求中访问会话?)
forms internet-explorer ruby-on-rails antiforgerytoken ruby-on-rails-4
我在我的Rails网站上使用Redcarpet Markdown.通常我想将类(或其他属性)添加到段落,表或其他元素中,但它不允许它.如果我用HTML替换markdown元素,那么我也需要用HTML替换内部markdown,这是一个麻烦.
例如,我想将类"table"添加到markdown表元素(因此它得到了Bootstrap的表样式),但是我需要用HTML替换Markdown表.
什么是最简单的解决方案?有没有一种简单的方法来修改Markdown以便它可以处理类?或者,有没有办法在HTML元素中允许Markdown?
示例更新
我想在div,table或paragraph中添加一个类,但仍然在元素中保留markdown.例如,我想生成以下HTML:
<p class="cool">
<b>Hello world</b> <a href="http://google.com">Google</a>
</p>
Run Code Online (Sandbox Code Playgroud)
有两种可能的解决方案,但我不知道如何使用Redcarpet Markdown进行解决方案:
获取类的特殊markdown语法,例如:
{class: cool}
**Hello world** [Google](http://google.com)
允许Markdown在HTML元素中工作:
<p class="cool">
**Hello world** [Google](http://google.com)
</p>
目前我只是在纯HTML中做这些元素而没有降价.但是我怎样才能让#1或#2工作?
markdown rendering ruby-on-rails redcarpet github-flavored-markdown
我在sessions_helper中有以下代码:
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
Run Code Online (Sandbox Code Playgroud)
这让我从任何控制器调用current_user来获取当前用户.(我从头开始使用类似于Railstutorial或Railscasts的身份验证).
我调用lookup_result了ajax请求,检查服务器以查看特定结果是否准备就绪.
$.get("/lookup_result?id=<%=id%>");
Run Code Online (Sandbox Code Playgroud)
它转到以下控制器方法:
def lookup result
user = current_user
# do things with user...
end
Run Code Online (Sandbox Code Playgroud)
这通常可以正常工作,但有时Rails无法获取current_user.我怀疑问题是cookie或CSRF令牌在某些情况下无法通过ajax请求传递,但为什么它通常有效?我该如何修复它以便始终有效?
更新:
我不知道如何复制错误.只有已登录的用户才能访问发送该请求的页面(尽管有人可以将ajax请求复制到另一个未登录的浏览器中).我用rollbar报告错误并保存请求数据.
当current_user失败时,这是user-agent的常用数据:
Mozilla/4.0(兼容; MSIE 7.0; Windows NT 5.1; InfoPath.1; ...)
这意味着Internet Explorer通过Ajax发送会话信息存在一些问题.有人知道怎么修这个东西吗?
下面你可以看到它返回的所有数据类别,尽管它对于任何带有"session"的东西都是空的.
时间戳
message.request_data.headers.Accept
message.request_data.headers.Accept-Encoding
message.request_data.headers.Accept-Language
message.request_data.headers.Cf-Connecting-Ip //(CF代表cloudflare)
message.request_data.headers .Cf-Ipcountry
message.request_data.headers.Cf-Ray
message.request_data.headers.Cf-Visitor
message.request_data.headers.Connection
message.request_data.headers.Host
message.request_data.headers.User-Agent
message.request_data.headers .Version
message.request_data.headers.X-Forwarded-For
message.request_data.headers.X-Forwarded-Port
message.request_data.headers.X-Forwarded-Proto
message.request_data.headers.X-Request-Start
message.request_data.方法
message.request_data.params .... //(显示各种参数)
...
message.request_data.session.defer //(所有这些会话项都为空)
message.request_data.session.domain
message.request_data.session .expire_after
message.request_data.session.httponly
message.request_data.session.id
message.request _data.session.path
message.request_data.session.renew
message.request_data.session.secret
message.request_data.session.secure …
rails应用程序包含许多不同的内容页面.页面被组织成称为章节的小组:
class Page < ActiveRecord::Base
attr_accessible: section_id #etc..
belongs_to :section
end
class Section < ActiveRecord::Base
attr_accessible :title #, etc...
has_many :pages
end
Run Code Online (Sandbox Code Playgroud)
部分也需要组织,但最好的方法是什么 - 重用部分本身,或创建一个新的单元模型?
选项1 - 重复使用部分
允许部分具有子部分和父部分.这样,您不需要创建具有与Section类似的字段的另一个模型.有些部分会有很多页面,而其他部分则有很多子部分:
class Section < ActiveRecord::Base
attr_accessible :parent_id :title # etc...
has_many :pages
belongs_to :parent, class_name: "Section"
has_many :children, class_name: "Section", foreign_key: "parent_id"
end
Run Code Online (Sandbox Code Playgroud)
选项2 - 新单元模型
创建另一个名为Unit的模型来组织这些部分.它将有许多类似的字段,但它将是一个明显独立的实体.
class Section < ActiveRecord::Base
attr_accessible :title, :unit_id # etc...
has_many :pages
belongs_to :units
end
class Unit < ActiveRecord::Base
attr_accessible :title # etc...
has_many :sections
end …Run Code Online (Sandbox Code Playgroud) 我创建了一个答案表并向其中添加了以下索引:
add_index :answers, [:output, :question_id], unique: true
Run Code Online (Sandbox Code Playgroud)
该索引允许通过其输出和 Question_id 快速查找答案。在创建许多答案时,我收到以下错误:
PG::ProgramLimitExceeded:错误:索引行大小 3088 超过索引
“index_answers_on_output_and_question_id”的最大值 2712
提示:无法对大于缓冲区页 1/3 的值建立索引。
考虑值的 MD5 哈希值的函数索引,或使用全文索引。
我该如何解决这个问题?我可以将唯一性方面转移到模型中,但索引很重要。Rails 是否支持创建 MD5 哈希值?
我的网站上有一个表单,用户可以提交答案文本以供控制器检查.
它使用标准的GET形式:
<%= form_tag('/submit', method: "get", remote: true) do %>
Run Code Online (Sandbox Code Playgroud)
但我最近得到了以下错误答案:
Request-URI太大
WEBrick :: HTTPStatus :: RequestURITooLarge
我应该将表单更改为POST以修复错误吗?这需要进行任何其他更改吗?
我要订购模型中的所有项目,Item以便它首先显示最新的项目。根据Rails指南,以下代码应该起作用:
Item.order("created_at DESC")
Run Code Online (Sandbox Code Playgroud)
但是,当我在终端中键入该(或多个)品种时,最新的项目始终显示在最后,这就是它们在我的页面上显示的方式。我如何有效地从他最近的第一人那里检索到它们?(我将在每个页面上一次只显示其中一些。)
请注意,我默认的项目范围是最早的。
更新: 这是我得到的SQL:
选择“评论”。*从“评论”中按评论排序。created_atASC,created_at DESC
所以我想我不应该使用默认范围...
我在Ruby on Rails网站上使用bootstrap-sass gem.我想让我的布局响应,所以我尝试添加@import "twitter/bootstrap/responsive"到各种文件,但我得到的只是一条消息说:
要导入的文件未找到或不可读:bootstrap/responsive.加载路径:Sass :: Rails :: Importer(site_path/app/assets/stylesheets/bootstrap_and_overrides.css.scss)
ruby-on-rails asset-pipeline responsive-design twitter-bootstrap
我的用户模型中有以下验证.当用户是访客时,我不希望它运行,所以我添加了一个unlessproc:
with_options :unless => :guest_user? do |user|
before_save { |user| user.email = email.downcase }
validates :email, presence: true, uniqueness: {case_sensitive: false}
end
Run Code Online (Sandbox Code Playgroud)
这会调用该方法,guest_user?并且不应在用户是来宾时运行.但是,验证在所有情况下都会运行.如何修复unlessproc以使其有效?
我的rails 3.2 app中有以下代码:
<ul>
<% user_to_show.topics.each do |topic| %>
<li> <%= link_to topic.name, topic %>
<ul>
<%= topic.nodes.each do |node| %>
<li> <%= link_to node.title, node %> </li>
<% end %>
</ul>
</li>
<% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)
当我转到用户页面时,我希望它只显示指向该主题中每个主题和节点的链接.它会这样做,但它也会在结尾显示每个节点的实际数据(见下文).我该怎么办呢?
Sample Topic
node1
node2
[#<Node id: 1, title: "node1", intro_content: "sample content", user_id: 2, date_modified: nil, created_at: "2012-07-19.." [etc..] #<Node id: 2, title: "node2", intro_content: "sample 2 content..", user_id: 2, etc.. ]
Run Code Online (Sandbox Code Playgroud) 我允许在我的Rails网站上进行Facebook身份验证,并使用Omniauth.我最近在生产中收到以下错误:
ActiveRecord :: RecordInvalid:验证失败:电子邮件不能为空,电子邮件无效
通常Facebook注册工作正常,那么什么会导致这个特定的错误?下面是我用Omniauth创建用户的代码.
def self.create_from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.email = auth[:info][:email]
user.password = SecureRandom.urlsafe_base64(n=10)
user.save!
end
end
Run Code Online (Sandbox Code Playgroud) authentication validation ruby-on-rails omniauth ruby-on-rails-3
我在 Heroku 上的 Rails 4 应用程序(目前在 unicorn 上)通常没有太多错误,但它会收到大量错误的 URL。每当输入错误的 URL 时,用户都会看到我的 404 页面,并且在 Rails 中引发 ActionController::RoutingError。这会作为错误报告给Rollbar和 NewRelic,并且它们会发出警报。我不断收到来自 NewRelic 的关于所有这些“错误”的警报。如何防止路由错误被报告为错误?
(我尝试将 newrelic.yml 中的一行更改为,ignore_errors: ActionController::RoutingError但没有帮助。)
error-handling ruby-on-rails heroku newrelic ruby-on-rails-4
ruby-on-rails ×12
heroku ×2
postgresql ×2
validation ×2
activerecord ×1
ajax ×1
architecture ×1
cname ×1
forms ×1
https ×1
indexing ×1
jquery ×1
markdown ×1
newrelic ×1
omniauth ×1
post ×1
redcarpet ×1
rendering ×1
ssl ×1
subdomain ×1
views ×1
webrick ×1