小编Mag*_*goo的帖子

部署没有依赖项的Scala二进制文件

有没有一种简单的方法可以将Scala Jar(~1MB)复制到服务器,然后让SBT获取所需的依赖项(~40MB)并运行它?

我已经看过sbt-onejar和sbt-assembly,但是这些将所有依赖项捆绑到一个jar中,在我的情况下变为~45MB,这需要很长时间才能上传到服务器.

目前我使用Capistrano从GitHub检出我的代码并编译它.然后我使用xsbt-start-script-plugin运行它 - 类似于Heroku管理它的方式.

问题是编译需要很长时间在服务器上(我正在使用EC2).带有~600MB冲头的EC2 Micro需要很长时间,有时会随机杀死该过程.我正在使用目前正在运行的EC2 Small实例(1.7GB ram),但随着代码库的增加而我添加了更多服务器,它可能会出现问题.

理想的工作流程是在本地(或在CI服务器上)编译Scala源,复制到服务器,让SBT引入自上次构建以来添加的其他依赖项(现有的将来自本地缓存的常春藤repo),然后为我提供一个简单的在Ubuntu 10.04上使用Upstart运行服务的脚本.

我还想了解其他Scala用户如何部署他们的代码.


(OP后来发布的"回答"代码)

FWIW这里是我的构建文件.

build.sbt

import com.typesafe.startscript.StartScriptPlugin
name := "XXX"
version := "0.1.0"
scalaVersion := "2.9.1"
resolvers += "XXX" at "http://repo.XXX.XXX"
libraryDependencies += "XXXX" %% "backend" % "0.1.0"
seq(StartScriptPlugin.startScriptForJarSettings: _*)
mainClass in Compile := Some("XXX.app.Main")
Run Code Online (Sandbox Code Playgroud)

项目/ build.sbt

resolvers += Classpaths.typesafeResolver
addSbtPlugin("com.typesafe.startscript" % "xsbt-start-script-plugin" % "0.5.0")
addSbtPlugin("com.eed3si9n" % "sbt-dirty-money" % "0.0.1")
Run Code Online (Sandbox Code Playgroud)

deployment scala jar sbt

10
推荐指数
1
解决办法
1472
查看次数

Rscript找不到库

在Unix群集上作为批处理作业运行R脚本时遇到问题。问题是当尝试在环境中加载库时,R无法找到该库。我举一个例子。我将使用基本的R脚本名称sess.R:

print(.libPaths())
library("gtools")

print(sessionInfo())
Run Code Online (Sandbox Code Playgroud)

如果我只是使用以下命令从命令行运行此脚本:

$ Rscript sess.R
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

[1] "/usr/lib64/R/library" "/usr/share/R/library"
R version 3.2.3 (2015-12-10)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS release 6.6 (Final)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  base

other attached packages:
[1] gtools_3.5.0
Run Code Online (Sandbox Code Playgroud)

库“ gtools”已正确加载,脚本正在运行。但是,如果我编写一个简单的批处理作业(我将在该作业中包含几个可选参数,包括错误和输出文件),例如:

#!/bin/bash
#SBATCH --output=sess.out
#SBATCH --error=sess.err

Rscript sess.R
Run Code Online (Sandbox Code Playgroud)

一秒钟后作业失败。我得到的两个输出文件当然是sess.out和sess.err。Sess.out包含库目录:

[1] "/usr/lib64/R/library" "/usr/share/R/library"
Run Code Online (Sandbox Code Playgroud)

这似乎与从命令行运行Rscript时的相同,所以那里没有错误。但是,由于脚本已终止,因此无法打印Info Session。sess.err文件包含以下错误:

Error in library("gtools") : there is …
Run Code Online (Sandbox Code Playgroud)

r libraries rscript

5
推荐指数
0
解决办法
518
查看次数

OData V4批处理请求基本授权

我们的OData端点是自托管的(OWIN)。对于单个请求:创建,更新,修补和删除所有内容都很好,但是问题是当我发送包含多个操作的批处理请求时,基本授权出现了问题。我读了很多文章,但仍然无法解决问题。在OData文档中说:

代表单个请求的每个MIME部件正文都不得包含:

• authentication or authorization related HTTP headers
Run Code Online (Sandbox Code Playgroud)

http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part1-protocol/odata-v4.0-errata03-os-part1-protocol-complete.html#_Toc453752314

因此,如果我将Authorization设置为批处理请求,但未将其设置为批处理中的每个请求,那么OnAuthorization方法中的actionContext.Request.Headers.Authorization会为null。我的问题是:如何从该批次中的请求获取批次请求的授权标头?

在端点中启用了“批次”:

HttpConfiguration config = new HttpConfiguration();
var odataBatchHandler = new DefaultODataBatchHandler(new HttpServer(config));
config.MapODataServiceRoute("ODataApi", null, builder.GetEdmModel(), odataBatchHandler);
config.Count().Filter().OrderBy().Expand().MaxTop(null).Select();
appBuilder.UseWebApi(config);
Run Code Online (Sandbox Code Playgroud)

这是授权逻辑:

public class ODataBasicAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
         //Question: here Authorization property is null, because this is Get request for SAStudent
                if (actionContext.Request.Headers.Authorization == null || actionContext.Request.Headers.Authorization.Scheme != "Basic")
                {
                    HandleUnauthorizedRequest(actionContext);
                }
                else
                {
                    ISession session = Login(actionContext.Request);
                    if (session == null)
                    {
                        HandleUnauthorizedRequest(actionContext);
                    }
                    else …
Run Code Online (Sandbox Code Playgroud)

c# authorization odata owin

5
推荐指数
1
解决办法
315
查看次数

字面比较奇怪

所以 - 这是代码

@echo off
setlocal

for %%a in (a A j J z Z) do for %%c in (d D) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")

for %%a in (Blue blue BLUE Red red RED) do for %%c in (Pink pink PINK) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")
Run Code Online (Sandbox Code Playgroud)

结果如下:

Microsoft Windows [Version 10.0.19042.804]
(c) 2020 Microsoft Corporation. All rights reserved.

"d" geq "a" …
Run Code Online (Sandbox Code Playgroud)

batch-file

5
推荐指数
1
解决办法
136
查看次数

Python - 使用 PyPDF2 批量旋转 pdf

我一直在编写代码来批量旋转文件夹内的 pdf 文件,但我找不到迭代和更改旋转文件的目标文件夹的方法,我的目的是将新文件保存在另一个文件夹,谢谢

import PyPDF2
from os import listdir

di = "C:\z_PruebPy\pdf"

archs = []

listarch = []

loc = r"C:/z_PruebPy/pdf/"

for x in listdir(di):
    archs.append(loc+x)

for arch in listarch:
    pdf_in = open(arch, 'rb')
    pdf_reader = PyPDF2.PdfFileReader(pdf_in)
    pdf_writer = PyPDF2.PdfFileWriter()

    for pagenum in range(pdf_reader.numPages):
        page = pdf_reader.getPage(pagenum)
        page.rotateClockwise(270)
        pdf_writer.addPage(page)

    pdf_out = open(arch, 'wb') #????????
    pdf_writer.write(pdf_out)
    pdf_out.close()
    pdf_in.close()
Run Code Online (Sandbox Code Playgroud)

python pdf pypdf2

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

如何将退出状态从HTA(vbscript)返回到调用批处理文件

如何将退出状态从HTA(vbscript)返回到调用批处理文件?

我的批处理文件代码

@echo OFF
echo Configuring Test...
call AppConfigurationEditor.hta
call TestConfigurationEditor.hta
Run Code Online (Sandbox Code Playgroud)

1.如果用户点击第一个HTA上的CANCEL按钮,我不想运行第二个HTA.

2.Batch脚本调用/立即显示第二个HTA,而不是等到第一个HTA关闭.

vbscript batch-file hta

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

优先队列实现说明

我正在阅读《竞争性编程 1》一书中的 Dijkstra 算法。在实现程序中,他们写了这样的内容:

#define pair<int,int> ii;
priority_queue< ii,vector<ii>,greater<ii> > pq ;
Run Code Online (Sandbox Code Playgroud)

如果我们将整数 s 作为源,则实现显示像这样推送对 (cost,source)(节点编号从 1 到 n):

pq.push(ii(0,s)) ;
Run Code Online (Sandbox Code Playgroud)

我的问题是我们正在将一对成本和节点放入优先级队列中。但是其他两个参数(即向量和更大)在priority_queue声明中做什么呢?

priority_queue< ii,vector<ii>,greater<ii> > pq ;
Run Code Online (Sandbox Code Playgroud)

我尝试声明类似的内容:

priority_queue< ii > pq ;
Run Code Online (Sandbox Code Playgroud)

并且代码有效(在我尝试过的那些测试用例上)。

谁能告诉我该声明的含义:

priority_queue< ii,vector<ii>,greater<ii> > pq ;
Run Code Online (Sandbox Code Playgroud)

上面的声明和上面的声明有什么区别

priority_queue< ii > pq ;
Run Code Online (Sandbox Code Playgroud)

宣言 ?

c++ dijkstra

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

windows批括号范围

如何在用parantheses('if'或'for'-loop)包围的范围中设置结果变量.结果是正确的(>> RESULT:aaa = bbb),直接调用过程,并且在for循环或if语句中使用时失败(>> RESULT:ccc =).

:: =====================================
@setlocal
@echo off
@rem (1)
call :testReturn aaa
echo RESULT: aaa = %aaa%

@rem (2)
if "1" == "1" (
call :testReturn ccc
echo RESULT: ccc = %ccc%
)

goto :eof

:testReturn
set %~1=bbb
exit /b
endlocal
Run Code Online (Sandbox Code Playgroud)

谢谢!!

windows scope batch-file parentheses

2
推荐指数
1
解决办法
2296
查看次数

将批处理文件中的波浪号(〜)替换为其他字符时,如何转义呢?

该脚本可以将某些字符替换为文件名中的指定字符,但不适用于tilde ~

以下两个部分工作正常。

@echo off
setlocal enabledelayedexpansion
for %%a in (*_*) do (
    set file=%%a
    ren "!file!" "!file:_=A!"
)
for %%a in (*-*) do (
    set file=%%a
    ren "!file!" "!file:-=B!"
)
Run Code Online (Sandbox Code Playgroud)

但是这部分不起作用。

for %%a in (*~*) do (
    set file=%%a
    ren "!file!" "!file:~=C!"
)
Run Code Online (Sandbox Code Playgroud)

为什么更换~不起作用以及如何解决?

cmd batch-file

2
推荐指数
1
解决办法
79
查看次数

在linux中使用批处理文件启动多个firefox配置文件

可以启动不同的firefox配置文件 firefox -P <profile-name> -no-remote

但是,当我想同时在linux中使用批处理文件启动多个配置文件时,只有第一个配置文件启动,后续配置文件才会在上一个配置文件退出之前启动.

目前我没有成功使用这个批处理脚本:

#! /bin/bash

firefox -P "profile 1" -no-remote
firefox -P "profile 2" -no-remote
firefox -P "profile 3" -no-remote
Run Code Online (Sandbox Code Playgroud)

基本上,profile 1开始很好,但profile 2直到我先退出firefox才开始; 在退出前一个命令之前,下一个命令不会执行.

在Windows中,我已成功设法使用此bat文件同时启动多个firefox:

start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "profile 1" 
start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "profile 2" 
start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "profile 3"  
Run Code Online (Sandbox Code Playgroud)

start帮助后的引号完成此操作,之后没有引号start,配置文件并非都在同一时间启动,但在linux中我不知道如何完成此操作?

linux bash firefox command-line

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

我不明白为什么"IF"在我的.BAT文件中不起作用

当这个程序中的最后一个命令:

If %V_EOM% EQU V_Day Set V_Type = M
Run Code Online (Sandbox Code Playgroud)

执行后,.BAT文件运行就会消失,并且不会执行以下暂停.我只是没有看到问题.

Rem XCopy C: Britt* Folders to Backup
Rem *************************************

Rem Set EOM/Daily Switch
Set V_Type = D

Rem Set /d Switch
Set V_DSwitch = /d

Set V_Output_Drive = G:\
Set V_File_Name_1 = XCopy
Set V_File_Name_2 = Backup
Set V_File_Name_3 = Daily

Date /t
Time /t

set V_Date = %date:~0,20%
set V_DOW = %date:~0,3%
set V_Mo= %date:~4,2%
set V_Day = %date:~7,2%
set V_Yr= %date:~10,4%

Rem EOM Check
If %V_Mo%  EQU 04 …
Run Code Online (Sandbox Code Playgroud)

cmd batch-file

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

批处理文件中的错误级别无法正常工作

我正在尝试使用带有批处理脚本的sqlcmd删除数据库.我遇到的问题是如果myql数据库在sql中不可用,则代码不会进入错误处理程序块.

@echo off
@echo IF ELSE DEMO
sqlcmd -S <servername> -U <username> -P <password> -Q "DROP DATABASE Mytest"  
IF ERRORLEVEL 1 goto err_handler
goto done

:err_handler
echo handle the error here
goto end

:done 
echo script completion code here

:end
@echo %Message%
pause
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出:

IF ELSE DEMO
Msg 3701, Level 11, State 1, Server HERCULES, Line 1
Cannot drop the database 'Mytest', because it does not exist or you do not have permission.
script completion code here
ECHO is off. …
Run Code Online (Sandbox Code Playgroud)

batch-file sqlcmd

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