如何在 heroku 上更改 gem?
How can I alter a gem on heroku?
我最近将我的应用程序部署到了 heroku。它使用 Devise,我必须更改 after_sign_up_path 以便在有人注册后它会正确重定向到设置页面。这在本地工作正常,但是当我在 heroku 上部署时,它会安装原始的未修改的设备 gem。
有谁知道在 heroku 上修改 gem 的方法,或者让它使用我的 vendor 文件夹中修改后的 gem 的方法?
谢谢。
假设你将 Devise 分叉到你的 github 帐户,你可以通过这样做将你的 Gemfile 指向它:
gem "devise", :git => "git://github.com/user/devise.git", :branch => "my-awesome-branch"
顺便说一句,我建议您重写一些设计方法,而不是破解 gem,但这只是我的 2cents。
这可能无法回答您的问题,但根据 devise wiki,您无需更改 gem 即可获得您喜欢的重定向行为,您只需重写 after_sign_in_path_for
方法在应用程序控制器中。 https://github.com/plataformatec/devise/wiki/How-To%3A-Redirect-to-a-specific-page-on-successful-sign-in-and-sign-out
示例:
def after_sign_in_path_for(resource)
current_user_path
end
因此,一般来说,在 heroku 上部署您的应用程序与在其他任何地方部署应用程序应该没有什么不同。
一个区别是,在 heroku 上,您可能 运行 在 'production' 环境设置中,在本地 'development'。如果这是问题所在,您也可以 运行 在本地生产。
但我不这么认为。当您说 "altered" Devise 时,您的意思是您实际上在 Devise gem 源代码本身内部编辑了源代码吗?
这不是一个好的做法。当新版本的 Devise 出现时,可能带有安全补丁,您打算怎么办?重新定制新版本?这不是一个很好的维护计划。如果你真的想这样做,你可以。最好的方法可能是在 git 存储库(在 git 集线器或其他任何地方)中创建 Devise gem 的一个分支,对其进行自定义并将您的自定义项提交到存储库,然后使用 gem 'devise', :git => 'http://some.git.repo.clone.url.org'
从 Gemfile 中您自己的 git 存储库指向您自定义的 Devise 版本
但这是个坏主意。
Devise 可能已经通过配置支持您的用例,而不是通过编辑 Devise 源代码。大多数有经验的开发人员会认为这是一种更可取的方式来完成你想要的。
在这种情况下,您似乎应该在自己的本地应用程序中提供 after_signup_path
方法覆盖,而不是修改设计源中的默认实现。 Google 了解更多信息,或咨询 the URL Finks provides in another answer,或 post 另一个问题,具体询问如何用 devise 做你想做的事情(这实际上与 heroku 无关),具体尽可能地了解你想要完成的事情。
我最近将我的应用程序部署到了 heroku。它使用 Devise,我必须更改 after_sign_up_path 以便在有人注册后它会正确重定向到设置页面。这在本地工作正常,但是当我在 heroku 上部署时,它会安装原始的未修改的设备 gem。
有谁知道在 heroku 上修改 gem 的方法,或者让它使用我的 vendor 文件夹中修改后的 gem 的方法?
谢谢。
假设你将 Devise 分叉到你的 github 帐户,你可以通过这样做将你的 Gemfile 指向它:
gem "devise", :git => "git://github.com/user/devise.git", :branch => "my-awesome-branch"
顺便说一句,我建议您重写一些设计方法,而不是破解 gem,但这只是我的 2cents。
这可能无法回答您的问题,但根据 devise wiki,您无需更改 gem 即可获得您喜欢的重定向行为,您只需重写 after_sign_in_path_for
方法在应用程序控制器中。 https://github.com/plataformatec/devise/wiki/How-To%3A-Redirect-to-a-specific-page-on-successful-sign-in-and-sign-out
示例:
def after_sign_in_path_for(resource)
current_user_path
end
因此,一般来说,在 heroku 上部署您的应用程序与在其他任何地方部署应用程序应该没有什么不同。
一个区别是,在 heroku 上,您可能 运行 在 'production' 环境设置中,在本地 'development'。如果这是问题所在,您也可以 运行 在本地生产。
但我不这么认为。当您说 "altered" Devise 时,您的意思是您实际上在 Devise gem 源代码本身内部编辑了源代码吗?
这不是一个好的做法。当新版本的 Devise 出现时,可能带有安全补丁,您打算怎么办?重新定制新版本?这不是一个很好的维护计划。如果你真的想这样做,你可以。最好的方法可能是在 git 存储库(在 git 集线器或其他任何地方)中创建 Devise gem 的一个分支,对其进行自定义并将您的自定义项提交到存储库,然后使用 gem 'devise', :git => 'http://some.git.repo.clone.url.org'
但这是个坏主意。
Devise 可能已经通过配置支持您的用例,而不是通过编辑 Devise 源代码。大多数有经验的开发人员会认为这是一种更可取的方式来完成你想要的。
在这种情况下,您似乎应该在自己的本地应用程序中提供 after_signup_path
方法覆盖,而不是修改设计源中的默认实现。 Google 了解更多信息,或咨询 the URL Finks provides in another answer,或 post 另一个问题,具体询问如何用 devise 做你想做的事情(这实际上与 heroku 无关),具体尽可能地了解你想要完成的事情。