личность omniauth не работает на герою с simple_form_for - PullRequest
0 голосов
/ 31 марта 2012

У меня проблемы с тем, что Heroku не играет в мяч и выдает мне эту ошибку

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

У меня работает следующее в dev.

model / user.rb

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

controllers / users_controller.rb

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

users / 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 %>

rout.rb

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

Это все работаетИдеально на моей машине, но Heroku это не нравится.environment / 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 Ответ

1 голос
/ 08 апреля 2012

Хорошо, я нашел ответ, но не уверен, почему это так.Позже может возникнуть другой вопрос, если я не найду его здесь в stackoverflow.

В любом случае, я следовал этому превосходному руководству на www.communityguides.eu и включил настройки omniauth в разработку.рб и производство.рб.Это имело смысл, так как пути OpenID :: Store были другими: -

development.rb OpenID :: Store :: Filesystem.new ('/ tmp')

production.rb OpenID:: Store :: Filesystem.new ('./ tmp')

Ответ ... Поместите настройки omniauth в инициализаторы / Omniauth.rb

Это означает, что теперь мне нужно изменить этофайл каждый раз, когда я нажимаю на Heroku, но Heroku благодарит меня и позволяет моему приложению нормально работать.

Вопрос, который возникает для меня (на который, я уверен, дан ответ в другом месте).Чем отличается порядок загрузки от Heroku и наших сред разработки?Похоже, что Heroku загружает инициализаторы перед настройкой среды.И еще один ... кто-нибудь знает обходной путь, который избавит меня от необходимости обновлять файл инициализатора Omniauth каждый раз, когда я хочу отправить в Heroku?:)

Спасибо за чтение, и я надеюсь, что это поможет кому-то сэкономить время.

...