omn​​iauth身份不能使用simple_form_for在heroku上工作

时间:2012-03-31 06:38:59

标签: heroku omniauth simple-form

我遇到了Heroku没有打球并且把这个错误扔给我的问题

ActionController::RoutingError (No route matches [POST] "/auth/identity/register"):

我在开发中有以下工作。

模型/ user.rb

class User < OmniAuth::Identity::Models::ActiveRecord
  has_many :services

控制器/ users_controller.rb

def new
  @user = env['omniauth.identity'] || User.new
end

用户/ new.html.erb

<%= simple_form_for @user, url: "/auth/identity/register" do |f| %><fieldset>
<legend><%= controller.action_name.capitalize %> User</legend>
<%= f.input :name, input_html: { name: "name" } %>
<%= f.input :email, input_html: { name: "email" } %>
<%= f.input :password, input_html: { name: "password" } %>
<%= f.input :password_confirmation, input_html: { name: "password_confirmation" } %>
<div class="form-actions">
  <%= f.button :submit %>
  <%= link_to 'Cancel', users_path, :class => 'btn' %>
</div></fieldset><% end %>

的routes.rb

match "/auth/:service/callback" => 'services#create'
match "/auth/failure" => 'services#failure'
resources :users

这一切都完全适用于我的机器,但Heroku不喜欢它。 环境/ development.rb和production.rb是使用“rails new ...”创建的默认值,并添加了以下内容: -

Rails.application.config.middleware.use OmniAuth::Builder do
require 'openid/store/filesystem'

provider :identity, fields: [:name, :email],
                    model: User,
                    on_failed_registration: lambda { |env|
                      UsersController.action(:new).call(env)
                    }

# generic openid
provider :open_id, :store => OpenID::Store::Filesystem.new('./tmp'), :name => 'openid'end

希望这一切都有道理,有人有答案。任何和所有的帮助非常感谢。

此致

1 个答案:

答案 0 :(得分:1)

好的,我找到了答案,但不确定为什么会这样。如果我在stackoverflow中找不到它,可能会成为另一个问题。

无论如何,我正在关注www.communityguides.eu上的这篇优秀指南,并将omniauth配置放在development.rb和production.rb中。由于OpenID :: Store路径不同,因此完全合理: -

development.rb 的OpenID ::商店:: Filesystem.new( '/ TMP')

production.rb 的OpenID ::商店:: Filesystem.new( './ TMP')

答案...... 将omniauth配置放在initializers / Omniauth.rb

这意味着每次推送到Heroku时我都必须更改此文件,但是Heroku感谢我并允许我的应用程序运行良好。

这为我提出的问题(我肯定会在其他地方回答)。 Heroku和我们的Dev环境的负载顺序有什么不同? Heroku似乎在环境配置之前加载初始化器。还有一个......任何人都知道一个解决方法,每次我想要推送到Heroku时,我都不得不更新Omniauth初始化程序文件吗? :)

Thanx阅读,我希望这有助于节省一些时间。