2012-03-31 2 views
0

나는 공을 연주하고 나에게이 오류omniauth 정체성과 Heroku가 작동하지 simple_form_for

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

를 던지고하지 Heroku가에 문제가있어 내가 DEV에서 다음 작업을해야합니다.

모델/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.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 

희망이 모두 의미가 누군가가 답을 가지고있다. 모든 도움이 많이 감사합니다.

감사

+0

흥미롭게도, 나는 Slainer68의 omniauth-identity "here"[https://github.com/slainer68/omniauth-identity/commit/238f38d396e191d85111d9dcd3109314ac4665f6]의 분기 된 버전을 사용합니다. 내가 Heroku "No route [POST]"/ auth/identity/register "와 일치하는 것처럼 로컬에서 동일한 오류가 발생합니다.") : ". 그래서 나는 로컬에서 작동하는 올바른 버전의 gem omniauth-identity, 1.0.0 ' "을 사용하도록하였습니다. 그래서 Heroku는 다른 것을로드하지 않을 것입니다. 그러나 슬프게도,이 버전은 여전히 ​​잘 작동하고 Heroku에 barfs. – gittinOld

답변

1

좋아, 나는이 그렇게하지만 그냥 확실하지 왜 대답을 발견했다. 나중에 stackoverflow에서 찾을 수 없으면 나중에 다른 질문이 될 수 있습니다.

어쨌든, 나는이 우수한 가이드를 www.communityguides.eu에두고 develop.rb와 production.rb에 omniauth 구성을 넣었습니다. ::

development.rb 오픈 ID : 스토어 :: Filesystem.new ('/ tmp를')

production.rb 오픈 ID : - 오픈 ID : 저장 경로가 다른 존재했다으로 완벽한 이해를 만들어 어떤 스토어 :: Filesystem.new ('./ TMP')

답변서 ... 이 내가 지금이 파일을 내가 밀어 때마다 변경해야 의미/초기화에 Omniauth.rb

을 omniauth 구성을 넣어 헤로 쿠에게,하지만 Heroku는 내게 감사하고 내 애플 리케이션을 멋지게 실행할 수 있습니다.

이 문제는 나에게 제기되는 질문이다. Heroku와 Dev 환경의로드 순서의 차이점은 무엇입니까? Heroku는 환경 설정 전에 초기화 프로그램을로드하는 것으로 보입니다. 그리고 하나 더 ... 누군가가 Heroku에 밀어 넣을 때마다 Omniauth 초기화 파일을 업데이트하지 않아도되는 해결 방법을 알고 있습니까? :)

고독에 대한 고맙습니다. 그리고 나는 누군가가 시간을 절약하는 데 도움이되기를 바랍니다.