小编Jas*_*rer的帖子

从AASM模型中获取状态/事件列表

我成功地将最新的AASM gem集成到一个应用程序中,使用它来创建向导.在我的情况下,我有一个模型订单

class Order < ActiveRecord::Base

  belongs_to :user
  has_one :billing_plan, :dependent => :destroy
  named_scope :with_user, ..... <snip>

  include AASM

  aasm_column :aasm_state
  aasm_initial_state :unauthenticated_user

  aasm_state :unauthenticated_user, :after_exit => [:set_state_completed]
  aasm_state : <snip>

  <and following the event definitions>

end
Run Code Online (Sandbox Code Playgroud)

现在我想让管理员通过AASM状态创建自己的图表.因此,我创建了另外两个名为OrderFlow和Transition的模型,其中order_flow有许多转换,订单为belongs_to order_flow.

到目前为止没问题.现在我想让我的管理员可以动态地将现有的转换/事件添加到order_flow图.

现在的问题是,我没有找到任何可能从我的订单模型中获取所有事件/转换的列表.aasm_states_for_select似乎是正确的候选人,但我不能在我的订单模型上调用它.

有人可以帮忙吗?

Thx提前.J.

ruby-on-rails state-machine aasm

6
推荐指数
2
解决办法
4969
查看次数

如何在客户端和服务器端呈现逻辑上将react-router和redux组合在一起

我希望我的基于React的SPA能够在服务器端呈现(这些日子不是这样).因此,我想将React与react-router,redux和一些构建层结合起来,就像isomorphic starterkit一样.

hapi通用redux连接在一起,但我正在努力如何组织我的流程.我的数据来自REST API的多个端点.不同的组件具有不同的数据需求,应该及时在客户端上加载数据.在服务器上,必须获取特定路由(组件集)的所有数据,并将必要的组件呈现给字符串.

在我的第一种方法中,我使用redux的中间件来创建异步操作,这些操作加载数据,返回一个promise,并SOME_DATA_ARRIVED在promise解析时触发一个动作.Reducers然后更新我的商店,组件重新渲染,一切都很好.原则上,这是有效的.但后来我意识到,在路由发挥作用的那一刻,流程变得尴尬.

列出许多数据记录的某个组件具有多个用于过滤记录的链接.每个过滤的数据集都应该通过它自己的URL来获取/filter-by/:filter.所以我使用不同的<Link to={...}>组件来更改点击的URL并触发路由器.路由器应根据当前URL表示的状态更新存储,这反过来导致相关组件的重新呈现.

这不容易实现.我componentWillUpdate首先尝试触发一个动作,异步加载我的数据,填充存储并为我的组件引起另一个重新渲染周期.但这不适用于服务器,因为只支持3种生命周期方法.

所以我正在寻找正确的方法来组织这个.用户与应用程序的交互(从用户角度更改应用程序状态)应更新URL.IMO这应该使路由器以某种方式加载必要的数据,更新商店,并开始对帐过程.

所以interaction -> URL change -> data fetching -> store update -> re-render.

这种方法也应该在服务器上工作,因为从请求的URL开始,应该能够确定要加载的数据,生成initial state并将该状态传递给storeredux 的生成.但我找不到妥善做到这一点的方法.所以对我来说,出现以下问题:

  1. 我的方法是错误的,因为有一些我不理解/不知道的东西?
  2. 在redux中保持从REST API加载数据是正确的store吗?
  3. 拥有保留state在redux中的组件store以及其他state由自己管理的组件是不是有点尴尬?
  4. 这个想法是interaction -> URL change -> data fetching -> store update -> re-render完全错的吗?

我愿意接受各种建议.

reactjs react-router isomorphic-javascript redux

6
推荐指数
1
解决办法
3838
查看次数

Rails在每次创建/更新请求时都保存IP地址

我想做以下事情:

定义一个before_filterapplication.rb任何地方提取用户的IP地址,并将其存储,最好是在会话.

在我的所有模型中定义两个过滤器,如before_create和before_update,它们将当前用户的IP添加到要存储的对象.

问题:我无法访问session[]既不env[]在一个模型.任何人都可以使用我还不知道的标准解决方案吗?

关心杰森

ip session env ruby-on-rails

4
推荐指数
1
解决办法
6090
查看次数

为什么推送到私有的安全docker注册表失败?

我想在自我修复的AWS ECS集群上运行一个私有的,安全的,经过身份验证的docker注册表.群集设置已完成且工作正常,但我很难开始registry:latest运行.问题是,每次我推送图像时,推动blob失败,并进入重试周期,除非我得到超时.

为了确保我的ECS设置不是阻止程序,我尝试使用Docker4Mac 1.12.0-a在本地设置所有内容.

首先,非常基本的设置工作.我创建了自己的注册表图像版本,在那里我将我的TLS证书包和密钥以及必要的htpasswd文件直接放入图像中.[我知道,这是不安全的,我只是为了测试目的而这样做].所以这是我的Dockerfile:

FROM registry:latest

COPY htpasswd /etc/docker
COPY server_bundle.pem /etc/docker
COPY server_key.pem /etc/docker
Run Code Online (Sandbox Code Playgroud)

server_bundle.pem我的域名(CN =*.mydomain.com)的通配符证书mydomain.com是第一个,后面是中间CA证书,因此客户应该感到高兴.我的htpasswd文件是使用推荐的方法创建的:

docker run --entrypoint htpasswd registry:2 -Bbn heyitsme mysupersecurepassword > htpasswd
Run Code Online (Sandbox Code Playgroud)

我建立了我的形象:

docker build -t heyitsme/registry .
Run Code Online (Sandbox Code Playgroud)

然后我运行一个非常基本的版本,没有TLS和身份验证:

docker run --restart=always -p 5000:5000 heyitsme/registry
Run Code Online (Sandbox Code Playgroud)

我实际上可以拉动,标记和重新推送图像:

docker pull alpine
docker tag alpine localhost:5000/alpine
docker push localhost:5000/alpine
Run Code Online (Sandbox Code Playgroud)

这有效.接下来,我通过环境变量进行TLS和基本身份验证:

docker run -h registry.mydomain.com --name registry --restart=always -p 5000:5000 \ 
  -e REGISTRY_HTTP_HOST=http://registry.mydomain.com:5000 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/etc/docker/server_bundle.pem …
Run Code Online (Sandbox Code Playgroud)

docker docker-registry docker-for-mac

3
推荐指数
1
解决办法
1689
查看次数