我们正在管理一个使用Stripe的旧Rails应用程序,但我们的Stripe版本比当前API落后26个月.我们希望升级到当前的Stripe API,但由于许多更改会影响我们的系统,因此我们真的想要在更改我们的实时网站使用的实时API之前测试更改.
所以我有两个问题:
1)使用API时,我们非常依赖实时和测试模式之间的区别.有没有办法只升级测试模式API(不升级Live),这样我们可以识别并纠正任何破坏而不会实际破坏用户体验?
2)是否可以一次升级API一个版本,而不是一次升级,以使转换对我们来说更易于管理?
我正在尝试在一个小的Rails应用程序中安装Sunspot,完全遵循gem设置说明,但每当RSolr::Error::Http: RSolr::Error::Http - 404 Not Found我尝试索引数据时遇到错误.我可以用一个新的应用程序重现这个; 以下是我遵循的确切步骤:
创建一个新的Rails 4.2.5应用程序:
$ rails new test_sunspot
$ cd test_sunspot/
$ spring stop # spring can cause `generate` commands to hang
$ rails g model Thing title:string
$ rake db:migrate
$ rails c
> Thing.create!(title: "Cats")
> Thing.create!(title: "Pizza")
> exit
Run Code Online (Sandbox Code Playgroud)
向模型添加太阳黑子索引:
class Thing < ActiveRecord::Base
searchable do
text :title
end
end
Run Code Online (Sandbox Code Playgroud)
将Sunspot添加到Gemfile:
...
gem 'sunspot_rails', '2.2.2'
gem 'sunspot_solr', '2.2.2'
...
Run Code Online (Sandbox Code Playgroud)
安装,启动和重新编制太阳黑子:
$ bundle install
$ rails g sunspot_rails:install # …Run Code Online (Sandbox Code Playgroud) 在 Ruby 2.3.0 上运行bundle installRails 项目时,我不断遇到包含行You have to install development tools first. 谷歌搜索后,最直接的解决方案是运行xcode-select --install,但我已经安装了 Xcode(运行该命令确认了这一点)并且我之前已经编译过这些 gem 的早期版本(在早期的 Ruby 版本上),没有出现任何问题。
还有什么可能导致此编译错误?
我很乐意听取有关如何在Phoenix控制器测试中运行pry调试器的建议:
require IEx 在目标文件中IEx.pry到所需的行iex -S mix test --trace但几秒钟后,这个错误总是出现:
16:51:08.108 [error] Postgrex.Protocol (#PID<0.250.0>) disconnected:
** (DBConnection.ConnectionError) owner #PID<0.384.0> timed out because
it owned the connection for longer than 15000ms
Run Code Online (Sandbox Code Playgroud)
正如消息所示,此时数据库连接似乎超时,并且任何调用数据库连接的命令都会出错DBConnection.OwnershipError.如何告诉我的数据库连接不要超时,以便我可以安静地调试我的测试?
我正在研究一个香草Elixir/Phoenix应用程序,并按照Programming Phoenix书中的一般步骤实现基本的登录和注销系统(参见下面的代码片段).但是我在书中或网上看不到有关如何设置基于cookie的插件会话在一定时间后过期的建议.Phoenix应用程序中的会话超时有哪些方法?
这是我的骨干auth系统的一些相关片段:
在endpoint.ex,应用程序配置为使用只读的基于cookie的会话:
plug Plug.Session,
store: :cookie,
key: "_zb_key",
signing_salt: "RANDOM HEX"
Run Code Online (Sandbox Code Playgroud)
我写了一个插件auth.ex(其中包括)可以登录经过身份验证的用户,并可以current_user根据user_id后续请求中找到的会话进行设置:
def login!(conn, user) do
conn
|> assign(:current_user, user)
|> put_session(:user_id, user.id)
|> configure_session(renew: true)
end
# ... more ...
def load_current_user(conn, _opts) do
cond do
conn.assigns[:current_user] ->
conn # If :current_user was already set, honor it
user_id = get_session(conn, :user_id) ->
user = Zb.Repo.get!(Zb.User, user_id)
assign(conn, :current_user, user)
true ->
conn # No user_id was found; …Run Code Online (Sandbox Code Playgroud) 我已经开始使用Sublime Text 2及其插件社区,作为我的Dreamweaver替代品(感谢众神).我喜欢Sublime并且显然不会在未来几个月或几年内实现它的许多功能,但是有一个简单的设置我很难搞清楚.
我过去曾经使用过BBedit.我非常喜欢的一个功能是在软包装时能够"反转"缩进行,这样换行看起来像这样:
Text text blah blah blah blah long enough to wrap
to a new line blah whenever soft wrap happens it
reverse-indents like this.
Here's a new line with no indent.
Run Code Online (Sandbox Code Playgroud)
也许我不应该与一个看似微不足道的特征结婚,但我发现当不可能将一行的开头与长行的"尾矿"混淆时,更容易阅读代码.有谁知道如何在Sublime中做到这一点?
默认情况下,我的 Phoenix 应用程序会在大约 5 行日志输出中记录有关每个 HTTP 请求的基本信息。只要我将日志级别设置为:debug,我就可以看到每个请求的方法、路径、控制器和操作、参数、响应代码和持续时间:
2019-06-14 16:05:35.099 [info] GET /manage/projects/7qDjSk
2019-06-14 16:05:35.103 [debug] Processing with RTLWeb.Manage.ProjectController.show/2
Parameters: %{"project_uuid" => "7qDjSk"}
Pipelines: [:browser, :require_login]
2019-06-14 16:05:35.116 [info] Sent 200 in 17ms
Run Code Online (Sandbox Code Playgroud)
这是一个很好的起点。但我想自定义应用程序以在一行上记录所有这些信息,这很有帮助,例如。在Papertrail 等工具中筛选大量日志输出时。特别是我希望每个请求都以这样的格式显示:
[PUT /manage/projects/74/prompts/290] params=%{"project_uuid" => "74", "prompt" => %{"html" => "<div>Test question 3</div>"}, "prompt_uuid" => "290"} user=38 (Topher Hunt) status=302 redirected_to=/manage/projects/74 duration=423ms
Run Code Online (Sandbox Code Playgroud)
在Phoenix.Controller 文档中,我看到我可以为 Phoenix 控制器日志配置日志级别,或者完全禁用它,但我没有看到自定义格式的方法。我怎样才能做到这一点?
在编写Phoenix应用程序时,我已经习惯于使用如下语法编写链接:link "My profile", to: Routes.user_url(@conn, :show, user)。最近,当使用LiveView时,我意识到您可以通过此处MyAppWeb.Endpoint而不是@conn此处,并且它将保持相同的状态。因为(我想)大多数Phoenix应用程序只有一个Endpoint模块,所以我有点希望它可以推断出我的默认Endpoint,这样我就不必在每次调用路径/ URL助手时都提供conn / endpoint。这让我想知道为什么Phoenix将这些助手设计为始终需要端点,而不是使用某些已配置的默认端点。
有谁知道为什么路由助手被设计为始终需要conn /端点,并且不允许您配置默认端点?这仅仅是“还没有解决”的问题,还是有一些重要的原因为什么每次都不明确要求conn / endpoint 会带来问题?
我正在编写我理解为非常标准的PHP/HTML代码.在PHP中模仿一个粗略的RESTful架构,受Rails的启发.我的页面包含许多动态生成的链接,结构如下:
<a href='objects_list.php?coursekey=<? echo $coursekey; ?>&delete_section=<?
echo $row['key']; ?>'>delete</a>
Run Code Online (Sandbox Code Playgroud)
如您所见,该链接有两个URL变量,每个变量都是根据页面知道的PHP变量设置的.很常见,对吗?
我最近转向Sublime Text 2作为我的主要开发环境.我认为这太棒了,我的开发过程得到了很大改善.但Sublime的语法突出显示似乎被在任何链接中分隔URL变量的&符号(&)弄糊涂了.它用红色突出显示每个&符号,好像我认为我犯了一个错误.
知道为什么吗?有什么方法可以让Sublime认识到链接通常需要在其中加上&符号?
编辑:无论PHP片段是否包含在链接href中,都会发生这种情况.Sublime似乎在链接中不信任&符号......?
每天有几次在我的Phoenix应用程序中浏览错误的堆栈跟踪时,我注意到某些绝对在执行的文件没有显示在堆栈跟踪中。
这是一个涉及format_date从我的模板调用的助手的示例。代码:
# The template, `...web/templates/home/index.html.eex`:
<h1>My Super Old Company</h1>
<p>We've been operating since <%= format_date(Timex.now()) %>!!</p>
# The `format_date` helper lives in the corresponding View module:
def format_date(date) do
template = "%b %d, %Y"
method = :strftime
# Whoops, it looks like I passed a bad value to Timex here
Timex.format!(nil, template, method)
end
Run Code Online (Sandbox Code Playgroud)
尝试呈现此页面会产生异常:
Request: GET /
** (exit) an exception was raised:
** (ArgumentError) invalid_date
(timex) lib/format/datetime/formatter.ex:60: Timex.Format.DateTime.Formatter.lformat!/4
(rtl) lib/rtl_web/templates/home/index.html.eex:3: RTLWeb.HomeView."index.html"/1
(rtl) lib/rtl_web/templates/layout/app.html.eex:27: RTLWeb.LayoutView."app.html"/1 …Run Code Online (Sandbox Code Playgroud)