我刚刚安装了一个新的Laravel 5项目,这是我在这个版本上的第一个项目.PHPUnit应该是开箱即用的框架和我看到的每个教程只是phpunit
在项目文件夹中键入以启动单元测试.
我检查过,PHPUnit在composer.json
,我也做了一个composer install
,composer update
以防万一它不会在这里
website(master)$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Removing phpunit/phpunit (4.6.1)
- Installing phpunit/phpunit (4.6.2)
Downloading: 100%
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用根本不phpunit
被认可
website(master)$ phpunit
-bash: phpunit: command not found
Run Code Online (Sandbox Code Playgroud)
似乎没有人在谷歌搜索之前就遇到过这个问题.我希望我没有犯任何愚蠢的错误.有什么想法或建议吗?多谢你们 ;)
我们希望将代码库更新到 Ruby 3,最大的突破性变化之一是关键字参数与方法中参数的混合。这个警告应该会出现
warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
Run Code Online (Sandbox Code Playgroud)
但我注意到在运行一个简单的脚本时,它只是没有出现
# script.rb
def my_method(argument, other:)
puts "hello"
end
options = { other: "medium" }
argument = true
my_method(argument, options)
$ rvm use 2.7.5
$ ruby script.rb
hello
$ rvm use 3.0.1
$ ruby script.rb
script.rb:1:in `my_method': wrong number of arguments (given 2, expected 1; required keyword: other) (ArgumentError)
from script.rb:8:in `<main>'
Run Code Online (Sandbox Code Playgroud)
它按计划在 Ruby 3 中中断,但在以前的版本中没有显示任何内容。
这种行为在我们的生产中是相同的,我在任何地方都找不到发生的情况。我已经使用过RUBYOPT='-W:deprecated'
,甚至 …
我使用Node/Mongoose/Socket.io有一个很大的逻辑问题...假设我有一个服务器模型,它通常在我的应用程序中同时调用,有些调用涉及更新模型中的数据.
db.Server.findOne({_id: reference.server}).exec(function(error, server) {
catches.error(error);
if (server !== null) {
server.anything = "ahah";
server.save(function(error) { });
}
}
Run Code Online (Sandbox Code Playgroud)
有时,2个人会同时打电话给这个,而第一个人会保存()另一个人已经找到了一个"服务器"并得到了"旧对象",它不是最新的并保存( )它.
这里的一个大问题是,当第二个人将保存()"服务器"("旧对象")时,它将逐字地覆盖第一个的变化......你可以想象它将在我的应用程序上创建的大冲突.
我考虑将所有save()方法更改为update()来解决问题但是在项目中的某些时候直接使用update()非常棘手,而不是那么实用.
当有人更新时,有没有办法"锁定"findOne()调用?就像你发现一个()时你也会说"嘿,我会尽快更新,所以不要让人们现在就找到它"(使用Mongoose,甚至是MongoDb)
已经有一段时间我正在搜索我没有找到任何答案:(
希望你理解我的问题;)谢谢!
当用户离开我的Meteor应用程序(版本1.2.0.2)时,我试图捕获; 等同于SocketIO disconnect()
服务器端的东西.
用户可以关闭他的浏览器,转到另一个网站或只是刷新页面,无论如何它都会触发
令人惊讶的是,我在互联网上搜索,一切都混乱,没有任何正常工作.我认为Meteor实际上是基于这种神奇的实时处理,所以它必须以某种方式管理这个事件.
Iron路由器文档指定:
onStop:路由停止时调用,通常在新路由运行之前.
我也找到了Router.load
,Router.unload
但没有一个能奏效.这是我目前[不工作]的代码,非常简单
Router.configure
layoutTemplate: 'MasterLayout'
loadingTemplate: 'Loading'
notFoundTemplate: 'NotFound'
Router.onStop (->
console.log('Try to stop')
Users.insert({
name: "This is a test"
lat: 0
lng: 0
})
)
Run Code Online (Sandbox Code Playgroud)
我在这里做错了吗?你如何在我的应用程序中捕获此事件?
我app/services
在Rails 5项目中的文件夹下需要加载/需要类的问题很多,而我开始放弃这个问题。
首先要弄清楚的是,services/
我在整个项目中都使用了简单的PORO类,以从控制器,模型等中抽象出大多数业务逻辑。
这棵树看起来像这样
app/
services/
my_service/
base.rb
funny_name.rb
my_service.rb
models/
funny_name.rb
Run Code Online (Sandbox Code Playgroud)
首先,当我尝试使用MyService.const_get('FunnyName')
它时,它FunnyName
来自我的models目录。MyService::FunnyName
但是,当我直接进行操作时,它似乎没有相同的行为,在我的大多数测试和更改中,此方法都可以正常工作,这很奇怪。
我意识到Rails config.autoload_paths
不会递归地加载东西;有意义的是,第一个FunnyName
被捕获的是,models/funny_name.rb
因为它肯定是已加载的,而不是另一个。
没关系,让我们找到一种解决方法。我将此添加到我的application.rb
:
config.autoload_paths += Dir[Rails.root.join('app', 'services', '**/')]
Run Code Online (Sandbox Code Playgroud)
这会将服务的所有子目录添加到中config.autoload_paths
。显然,从Rails 5开始,不建议编写类似的内容。但是这个想法对我来说确实不错。
现在,当我启动我的应用程序时,它崩溃并输出如下内容
无法自动加载常量Base,需要/.../backend/app/services/my_service/base.rb进行定义(LoadError)
名称已更改,但这是我之前编写的树的匹配路径
问题是,base.rb
在错误导致我进入的确切文件中进行了定义,其中包含类似
class MyService
class Base
end
end
Run Code Online (Sandbox Code Playgroud)
因此,我尝试了其他解决方法,其中很多方法都无效。因此,我最终完全删除了autoload_paths
,然后直接将其添加到application.rb
Dir[Rails.root.join('app', 'services', '**', '*.rb')].each { |file| require file }
Run Code Online (Sandbox Code Playgroud)
现在base.rb
已正确加载,MyService.const_get('FunnyName')
实际上将返回正确的类,并且一切正常,但这是一种令人作呕的解决方法。此外,它尚未经过测试,production
但根据环境可能会产生问题。
从application.rb
声音中要求整棵树是个坏主意,我不认为可以这样保留。 …
我需要将包含有效UTC时间的字符串转换为一个字符串Ecto.DateTime
,稍后我将以正确的格式将其插入到我的数据库中.我尝试过使用该Ecto.DateTime.cast(date)
方法,但似乎没有用.该字符串Sat Aug 04 11:48:27 +0000 2012
来自Twitter API.
我知道有些像Timex这样的库我还没有检查过.Elixir中是否有任何简单易用的解决方案?
我在 Rails 控制器中。我尝试获取一些params
数据并更改一些数据来更新模型,但我也想保持原始数据params
不变。
合乎逻辑的方法是使用clone
ordup
但无论我尝试什么,它都会失败并更改原始哈希。
# Original product_params which is set as params.require(:product)
{"name"=>"Product 2",
"brand"=>"Brand 2",
"desc"=>"Placeat a sunt eos incidunt temporibus.\r\n\r\nReprehenderit repudiandae amet quibusdam dolorem et. Itaque commodi at.",
"hs_code"=>"12212121",
"options_attributes"=>
{"0"=>{"name"=>"hkjlVariation 4", "suboptions_attributes"=>{"0"=>{"name"=>"Chkjlhoice 0", "id"=>"582209026b710eded24ecd12"}}, "id"=>"582209026b710eded24ecd13"},
"1"=>
{"name"=>"hhVhariation h5kkk",
"suboptions_attributes"=>{"0"=>{"name"=>"Choice 0kh", "id"=>"582209026b710eded24ecd14"}, "1"=>{"name"=>"hkjChoice 1", "id"=>"582209026b710eded24ecd16"}, "2"=>{"name"=>"kkk"}},
"id"=>"582209026b710eded24ecd15"},
"2"=>{"name"=>"lh", "suboptions_attributes"=>{"0"=>{"name"=>"klhj"}}}}}
# Method to change the `suboptions_attributes` to `nil`
def product_params_without_suboptions
copy = product_params.dup
copy.tap do |product_param|
product_param[:options_attributes].each do |key, option_attribute|
unless …
Run Code Online (Sandbox Code Playgroud) 这里真的很奇怪的问题。我正在通过 为我的网站生成管理员,\Console\Command
并且在某些时候我显然创建了它。
$user = User::create([
'first_name' => 'Admin',
'last_name' => 'Inistrator',
'phone' => '',
'email' => $email,
'password' => bcrypt($password),
'role' => 'admin',
]);
Run Code Online (Sandbox Code Playgroud)
我的数据库中的结果是该帐户获得了一个user
角色而不是admin
,但是如果我这样做
$user = User::create([
'first_name' => 'Admin',
'last_name' => 'Inistrator',
'phone' => '',
'email' => $email,
'password' => bcrypt($password),
'role' => 'admin',
]);
$user->role = 'admin';
$user->save();
Run Code Online (Sandbox Code Playgroud)
然后它完美地工作。我怀疑 Laravel 5 在我创建一个新帐户时会做一些奇怪的事情,该帐户将与所有特征相关联,等等与User
模型相关联......你怎么看?
PS:这是我的迁移表
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* …
Run Code Online (Sandbox Code Playgroud) 我在几个项目中使用了Stripe API。
我第一次必须考虑一个特殊情况,客户注册他的卡(或其他任何可能的情况)并从 Stripe 获得一些钱;类似退款,但之前没有付款...
我意识到系统具有此类功能的风险,必须对其进行过度保护。
我在网上搜索,没有找到任何关于它的答案。是否可以 ?如果是,您如何使用 API 做到这一点?
我正在建造一个关于帆(0.10.0-rc5)的项目几天,在少数情况下我需要使用相同的数据一次更新多个条目,所以我做了一些...
Servers.find({owner_id: anonymous_user.id}).exec(function(error, servers) {
catches.error(error);
queries.save_each(servers, {owner_id: user.id});
});
Run Code Online (Sandbox Code Playgroud)
有趣的部分是我创建的queries.save_each()...
/**
* Save each ActiveRecord objects with the desired attributes
* @param {object} objects ActiveRecord object (e.g. servers, users)
* @param {object} updates datas to update
* @return {void}
*/
save_each = function(objects, updates) {
// For each object we will update the wanted datas
for (var n in objects) {
objects[n] = variables.inject(objects[n], updates);
objects[n].save(function(error) {
catches.error(error);
});
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,它检查每个条目并使用save()从新数据更新它.它工作正常,但我想知道在水线上是否已经没有做过这样做; 我没有找到任何东西,但我是风帆初学者,也许我错过了什么!
任何的想法 ?