标签: actioncontroller

如何在每个环境的基础上设置config.action_controller.default_url_options = {:host ='#''}

现在我正在使用它适用于开发主机,但是当我转向生产时,我必须手动更改{:host =>""}代码.

post.rb

def share_all
  url =  Rails.application.routes.url_helpers.post_url(self, :host => 'localhost:3000')
  if user.authentications.where(:provider => 'twitter').any?
    user.twitter_share(url)  
  end
end
Run Code Online (Sandbox Code Playgroud)

我想使用它然后定义每个环境的default_url_options:

post.rb

def share_all
  url =  Rails.application.routes.url_helpers.post_url(self)
  if user.authentications.where(:provider => 'twitter').any?
    user.twitter_share(url)  
  end
end
Run Code Online (Sandbox Code Playgroud)

我已经尝试将此添加到我的config/environments/development.rb但我仍然得到"缺少主机链接到!请提供:host参数或设置default_url_options [:host]"错误

development.rb

config.action_controller.default_url_options = {:host => "localhost:3000"}
Run Code Online (Sandbox Code Playgroud)

我甚至用这种方式尝试过:

development.rb

config.action_controller.default_url_options = {:host => "localhost", :port => "3000"}
Run Code Online (Sandbox Code Playgroud)

编辑:

我现在也遵循了这个并且仍然是相同的错误指南http://edgeguides.rubyonrails.org/action_controller_overview.html#default_url_options

应用控制器

class ApplicationController < ActionController::Base
  protect_from_forgery
  include ApplicationHelper
  def default_url_options
    if Rails.env.production?
      { :host => "example.com"}
    else
      {:host => "example1.com"}
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这让我发疯,我在这里失踪了什么?

ruby-on-rails actioncontroller ruby-on-rails-3

58
推荐指数
5
解决办法
5万
查看次数

如何处理基于JSON的RESTful代码中的异常?

我有一个"软件即服务"应用程序,它使用通过RESTful API传递的JSON.

简单地说:在使用带有JSON数据交换的RESTful API时,捕获和报告异常的最佳实践是什么?

我的第一个想法是通过生成脚手架来看看Rails的作用,但这显然是不对的.这是一段摘录:

class MumblesController < ApplicationController

  # GET /mumbles/1
  # GET /mumbles/1.json
  def show
    @mumble = Mumble.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @mumble }
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果JSON代码发送不存在的ID,例如

http://www.myhost.com/mumbles/99999.json
Run Code Online (Sandbox Code Playgroud)

那么Mumble.find()将引发ActiveRecord :: RecordNotFound.ActionController将捕获它并在HTML中呈现错误页面.但HTML对于期望JSON的客户端来说是无用的.

我可以通过将Mumble.find()包装在一个begin ... rescue RuntimeError块中并渲染JSON status =>:unprocessable_entity等来解决这个问题.

但是,如果客户端的应用程序发送无效路径,例如:

http://www.myhost.com/badtypo/1.json
Run Code Online (Sandbox Code Playgroud)

是一个基于JSON的应用程序应该捕获并返回JSON中的错误?如果是这样,我在哪里捕获它而不深入ActionDispatch?

总的来说,如果出现错误,我是否应该让ActionController生成HTML?那感觉不对......

json ruby-on-rails actioncontroller

33
推荐指数
3
解决办法
2万
查看次数

使用`ActiveRecord with_connection do`&ActionController :: Live时出现线程错误

主要编辑:自从最初发现这个问题以来,我已将其削减到下面.我认为现在对这个问题的描述略微准确.因此,对OP的评论可能不完全相关.

编辑在rails/puma项目中发布的轻微修改版本:https://github.com/rails/rails/issues/21209,https://github.com/puma/puma/issues/758

编辑现在转载OS X和Rainbows

简介: 当使用Puma并运行长时间运行的连接时,我一直收到与跨越线程的ActiveRecord连接相关的错误.这表现在消息 message type 0x## arrived from server while idle 和锁定(崩溃)服务器中.

设置:

  • Ubuntu 15/OSX Yosemite
  • PostgreSQL(9.4)/ MySQL(mysqld 5.6.25-0ubuntu0.15.04.1)
  • Ruby - MRI 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]/ Rubiniusrbx-2.5.8
  • 导轨(4.2.3,4.2.1)
  • Puma(2.12.2,2.11)
  • pg(pg-0.18.2)/ mysql2

请注意,并非所有上述版本的组合都已尝试过.首先列出的版本是我目前正在测试的版本.

  • rails new issue-test
  • 添加路线 get 'events' => 'streaming#events'
  • 添加控制器 streaming_controller.rb
  • 设置数据库的东西(pool: 2但看到不同的池大小)

码:

class StreamingController < ApplicationController

  include …
Run Code Online (Sandbox Code Playgroud)

ruby multithreading connection-pooling ruby-on-rails actioncontroller

33
推荐指数
1
解决办法
1403
查看次数

Rails是否带有"未授权"的例外?

我正在编写一个使用普通旧Ruby对象(PO​​RO)从控制器中抽象出授权逻辑的应用程序.

目前,我有调用自定义异常类NotAuthorized,我rescue_from在控制器级别,但我很好奇,想知道:是否导轨4已经配备了一个例外,表明一个动作没有被授权?我是通过实施这个例外来重新发明轮子的吗?

澄清:raise AuthorizationException控制器内部没有发生任何事情,它发生在控制器外部完全分离的PORO内部.该对象不了解HTTP,路由或控制器.

ruby ruby-on-rails actioncontroller

32
推荐指数
2
解决办法
2万
查看次数

Rails 3:获取当前命名空间?

使用方法:layout_for_namespace我设置我的应用程序的布局取决于我是在前端还是后端,因为后端使用命名空间"admin".

我找不到一个很好的方法来找出我是哪个命名空间,我找到的唯一方法是从params [:controller]解析字符串.当然这很容易,似乎是安全的,并且运行良好.但我只是想知道是否有更好的,准备好的方法来做到这一点.有人知道吗?

目前我只使用以下方法:

def is_backend_namespace?
  params[:controller].index("admin/") == 0
end
Run Code Online (Sandbox Code Playgroud)

提前致谢

阿恩

namespaces ruby-on-rails actioncontroller ruby-on-rails-3

31
推荐指数
7
解决办法
2万
查看次数

访问AccountController外部的UserManager

我试图aspnetuser从不同的控制器(而不是accountcontroller)设置表中的列的值.我一直试图访问,UserManager但我不知道如何做到这一点.

到目前为止,我已经在控制器中尝试了以下内容我想用它:

    ApplicationUser u = UserManager.FindById(User.Identity.GetUserId());
    u.IsRegComplete = true;
    UserManager.Update(u);
Run Code Online (Sandbox Code Playgroud)

这不会编译(我想因为UserManager还没有实例化控制器)

我还尝试创建一个公共方法,AccountController以接受我想要更改值的值并在那里做,但我无法弄清楚如何调用它.

public void setIsRegComplete(Boolean setValue)
{
    ApplicationUser u = UserManager.FindById(User.Identity.GetUserId());
    u.IsRegComplete = setValue;
    UserManager.Update(u);

    return;
}
Run Code Online (Sandbox Code Playgroud)

如何访问和编辑帐户控制器之外的用户数据?

更新:

我尝试在其他控制器中实例化UserManager,如下所示:

    var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
    ApplicationUser u = userManager.FindById(User.Identity.GetUserId());
Run Code Online (Sandbox Code Playgroud)

我的项目符合(有点兴奋),但当我运行代码时,我收到以下错误:

Additional information: The entity type ApplicationUser is not part of the model for the current context.
Run Code Online (Sandbox Code Playgroud)

更新2:

我已将该功能移至IdentityModel(不要问我在这里抓住吸管),如下所示:

   public class ApplicationUser : IdentityUser
    {
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc actioncontroller asp.net-mvc-5 asp.net-identity-2

28
推荐指数
2
解决办法
3万
查看次数

如何为Rails ActionMailer配置主机名?

我正在处理一个相当传统的忘记密码电子邮件 - 我想通过电子邮件向用户发送密码更改令牌,这些令牌嵌入在链接中,他们可以点击这些令牌来更改密码.我通过传统的ActionMailer发送电子邮件.

如果我使用普通的link_to标签

<%= link_to "click here", :controller => foo, :action => 'bar', :token => token %>
Run Code Online (Sandbox Code Playgroud)

我得到一个相对链接 - 相当无用的电子邮件.

如果我加入

:only_path => false,然后它说我需要设置错误default_url_options[:host].ActionController文档暗示您通过覆盖控制器中的#default_url_options方法来实现这一点.当然有一个配置选项告诉Rails它的主机名是什么,而不添加我自己的配置文件,解析它等?

ruby-on-rails actionmailer hostname actioncontroller

20
推荐指数
2
解决办法
3万
查看次数

skip_before_action和Rails 5

我刚刚升级到Rails 5并且一切都很顺利但是没有明显的原因,一个被调用的方法skip_before_action不允许rspec运行此消息

在process_action回调之前:尚未定义redirect_heroku_user(ArgumentError)

这是非常奇怪的,因为它在rails 4上运行得很好.这是我的代码:

# application_controller.rb
def redirect_heroku_user
  redirect_to root_path if heroku_user?
end 

# some_controller.rb
skip_before_action :redirect_heroku_user, only: :edit
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails actioncontroller ruby-on-rails-5

18
推荐指数
2
解决办法
9120
查看次数

Rails ActionController为每个操作执行相同的代码

对于那里的rails专家,我想知道在Web应用程序中的每个操作执行相同代码的位置和方式?如果你能指出我的文章或提供一个简短的代码片段,我将非常感激.

提前感谢任何可以提供帮助的人.

ruby-on-rails actioncontroller

17
推荐指数
2
解决办法
5893
查看次数

default_url_options和rails 3

由于不推荐使用ActionController :: Base#default_url_options,我想知道如何在rails3中设置默认的url选项.默认URL选项不是静态的,而是依赖于当前请求.

http://apidock.com/rails/ActionController/Base/default_url_options

谢谢,科林

actioncontroller ruby-on-rails-3

17
推荐指数
2
解决办法
2万
查看次数